w tym artykule omówimy i poznamy podstawy i wszystkie szczegóły dotyczące operacji konwersji typu danych SQL Server, a także przejrzymy wbudowane funkcje konwersji SQL i TRY_CONVERT z różnymi przykładami. Na początku wyjaśnimy i wyjaśnimy składnię funkcji konwersji SQL, a następnie dowiemy się, w jaki sposób możemy wykonać proces konwersji danych liczbowych i typów danych daty/czasu na dane znakowe.,
Implicit vs Explicit
proces zmiany typu danych wartości na inny typ danych jest określany jako konwersja typu danych, a także prawie wszystkie języki programowania zawierają niektóre funkcje konwersji danych lub funkcjonalności. Kiedy przestawiamy naszą perspektywę na SQL Server w celu omówienia szczegółów operacji konwersji danych SQL, na początku możemy rozdzielić proces konwersji danych na dwie części; konwersje niejawne i jawne., Implicit conversion jest wykonywany przez SQL Server na potrzeby wewnętrzne, a dodatkowe szczegóły można znaleźć w artykule Implicit conversion in SQL Server. Jawna konwersja jest wykonywana jawnie przez programistę baz danych lub administratora, a jednocześnie proces konwersji jest dokonywany za pomocą dowolnej funkcji konwersji danych. W tym artykule skupimy się szczególnie na funkcji konwersji SQL. Funkcja ta umożliwia konwersję jednego typu danych na inny określony typ danych. Na początku zinterpretujemy składnię funkcji konwersji SQL.,
składnia
1
|
convert (datatype (length), expression, style)
|
DATA_TYPE: parametr ten definiuje docelowy typ danych, który ma być nawrócony. parametr data_type może przyjmować te typy danych jako dane wejściowe, które są pokazane na poniższej liście tablic.
length: jest to opcjonalny parametr określający docelowy typ danych length., Domyślną wartością tego parametru jest 30.
wyrażenie: parametr ten określa wartość, którą chcemy przekonwertować na inny typ danych.
style: jest to parametr integer, który określa styl wyjściowy przeliczonej wartości. Wartość ta jest bardziej przydatna dla formatów typu danych date.
teraz wzmocnimy te teoretyczne instrukcje różnymi praktycznymi przykładami.
Konwertuj Float na Int
w tym przykładzie przekonwertujemy typ danych float na liczbę całkowitą., W poniższym zapytaniu zadeklarujemy zmienną, że typem danych jest float, a następnie użyjemy funkcji SQL CONVERT, aby przekonwertować wartość float na liczbę całkowitą, więc w tym celu wykonamy operację konwersji danych.,
1
2
3
div> 4
5
6
|
–deklaracja zmiennej float
określająca @floatval jako float
–przypisanie zmiennej float do wartości
set @floatval = 1132.,12345
–Konwertuj wartość float na int
wybierz CONVERT(int, @FloatVal) jako ConvertedValue
|
konwertuj wartość float na wartość varchar
w tym przykładzie przekonwertujemy wartość float na wartość VARCHAR. Ten przykład jest bardzo podobny do poprzedniego, ale jedyną różnicą jest to, że zamienimy wartość zmiennoprzecinkową na varchar.,
1
2
3
div> 4
5
6
|
–deklaracja zmiennej float
określająca @floatval jako float
–przypisanie zmiennej float do wartości
set @floatval = 1132.,12345
–Convert float value to VARCHAR
SELECT CONVERT(VARCHAR, @FloatVal) AS ConvertedValue
|
w poniższym przykładzie nie będziemy wysyłać żadnej wartości do parametru length funkcji konwersji SQL, więc parametr length musi być ustawiony na wartość domyślną. Jak już zauważyliśmy w wyjaśnieniu składni funkcji konwersji SQL, ta domyślna wartość to 30 i teraz to udowodnimy., W poniższym zapytaniu utworzymy tabelę tymczasową i wstawimy przekonwertowaną wartość do tej tabeli, a następnie przeanalizujemy strukturę danych tej tabeli.,
1
2
3
div> 4
5
6
7
8
9
10
|
DROP TABLE IF EXISTS TestConvertedTable
–deklaracja zmiennej float
, Z PODANIEM @FloatVal JAK Float
–Przypisanie zmiennej wartości float
SET @FloatVal = 1132.,12345
–Konwertuj wartość zmiennoprzecinkową na varchar
wybierz CONVERTEDVALUE(varchar, @FloatVal) jako ConvertedValue na TestConvertedTable
— Analizuj tymczasową tabelę
wybierz TABLE_NAME,COLUMN_TYPE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH
z INFORMATION_SCHEMA.,Kolumny, w których TABLE_NAME=’TestConvertedTable'
|
jak widać na powyższym obrazku, typ danych float został przekonwertowany na wartość VARCHAR i nie ustawiliśmy jej długości parametr więc SQL Server zastosował domyślną wartość parametru length jako 30.
teraz ustawimy parametr length funkcji konwersji SQL, a następnie ponownie sprawdzimy długość typu danych varchar.,
1
2
3
div> 4
5
6
7
8
9
10
|
DROP TABLE IF EXISTS TestConvertedTable
–deklaracja zmiennej float
, Z PODANIEM @FloatVal JAK Float
–Przypisanie zmiennej wartości float
SET @FloatVal = 1132.,12345
–Konwertuj wartość zmiennoprzecinkową na varchar
wybierz CONVERTEDVALUE(varchar(20), @FloatVal) jako ConvertedValue na TestConvertedTable
— Analizuj tymczasową tabelę
wybierz TABLE_NAME,COLUMN_TYPE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH
z INFORMATION_SCHEMA.Kolumny, w których TABLE_NAME=’TestConvertedTable'
|
Konwersja pieniędzy na Varchar
typ danych pieniędzy SQL Server pomaga przechowywać wartości pieniężne., Możemy zdefiniować wartości pieniężne poprzedzone symbolem waluty, jednak SQL Server nie przechowuje symboli waluty ani żadnych danych związanych z symbolem waluty. W poniższym zapytaniu przekonwertujemy typ danych money na varchar i użyjemy również parametru style funkcji konwersji SQL. Za pomocą parametru style możemy określić przecinki oraz długość prawej cyfry dziesiętnej. Poniższy wykres pokazuje wartość parametru style i wyjście funkcji konwersji SQL.,
Value |
Style Parameter |
Comma Delimiter |
Right decimal digit |
Output |
no |
||||
yes |
4,936.,56 |
|||
no |
konwertuj typy danych float i Real na varchar
typy danych float i Real są przybliżonymi typami danych liczbowych w SQL Server i oznacza to, że te typy danych nie przechowują dokładnych wartości. Przechowują one bardzo bliskie przybliżenie przechowywanej wartości. Teraz wyjaśnimy przybliżoną koncepcję numerycznego typu danych., W poniższym zapytaniu utworzymy tabelę, która ma dwie kolumny i typy danych tych kolumn są float i real, a następnie wstawimy kilka wartości liczbowych. W rzeczywistości spodziewaliśmy się dwucyfrowych liczb w tabeli, jednak typ danych real I float przechowuje najbliższe wartości do wartości oczekiwanych.
poniższa tabela jest cytowana w dokumentach Microsoft i wyjaśnia styl konwersji typów danych typu float i real na dane tekstowe.,
Wskazówka: notacja naukowa jest specjalną metodą wyrażania bardzo dużej liczby lub małych liczb najczęściej używanych w nauce.
wartość |
Wyjście |
0 (domyślnie) |
maksymalnie 6 cyfr. Stosowane w notacji naukowej, w stosownych przypadkach. |
zawsze 8 cyfr. Zawsze używany w notacji naukowej. |
|
zawsze 16 cyfr. Zawsze używany w notacji naukowej. |
|
zawsze 17 cyfr. Użyj do bezstratnej konwersji., Dzięki temu stylowi każda odrębna zmiennoprzecinkowa lub rzeczywista wartość jest gwarantowana do konwersji na odrębny ciąg znaków. |
teraz zademonstrujmy przykład, który zawiera wszystkie style konwersji danych zgodnie z tą tabelą.
jak widać powyżej, zestaw wyników pokazuje, że parametr style zmienia wyjście funkcji konwersji SQL.
Konwertuj datę/czas na Varchar
formaty daty/czasu mogą się różnić w zależności od ustawień lokalnych i z tego powodu potrzebujemy różnych formatów do reprezentowania daty / czasu., Wyobraź sobie, że masz aplikację i użytkownicy z różnych krajów korzystają z tej aplikacji, więc jeśli ktoś łączy tę aplikację w USA, musisz reprezentować datę jako format Miesiąc / Dzień/Rok. Z drugiej strony inny użytkownik łączy tę aplikację w Wielkiej Brytanii i musisz reprezentować format daty jako format dnia / miesiąca/roku. W tym przypadku musimy określić datę / czas reprezentujący styl zgodnie z ustawieniem locale data / czas. procedura składowana sp_helplanguage zwraca obsługiwane języki ze szczegółowymi informacjami w SQL Server.,
dodatkowo możemy określić język dla danej sesji i w ten sposób możemy dostosować funkcje daty/czasu do konkretnego języka. W poniższym zapytaniu ustawimy język na polski i wtedy możemy zobaczyć zmianę nazwy miesiąca i dnia zgodnie z polskimi ustawieniami regionalnymi.
wskazówka: jeśli projektujesz wielonarodową bazę danych aplikacji, Zawsze przechowuj czas UTC (Coordinated Universal Time) w jednej kolumnie, aby uniknąć problemów z datą / czasem z powodu ustawień lokalnych.,wynik do niemieckiego standardu możemy użyć następującego zapytania:
1
|
select getdate() as, convert(VARCHAR(50), getdate (), 104) as
|
w poniższej tabeli można znaleźć każdą kombinację użycia parametru style i całego formatu wyjściowego funkcji SQL convert () dla konwersji daty/czasu na dane znakowe.,
ow, zademonstrujemy tę tabelę z wszystkimi kombinacjami dla funkcji SQL GETDATE, dzięki czemu możemy dowiedzieć się, jaki wpływ parametru style ma na wyjścia funkcji SQL CONVERT.
teraz wymienimy kilka punktów, które musimy wziąć pod uwagę na temat operacji konwersji daty/czasu. Na początku tej sekcji rozmawialiśmy o opcjach i ustawieniach języka SQL Server, więc jeśli zmienimy ustawienie języka, wpływa to na niektóre wyjścia stylu konwersji daty / czasu., W poniższym przykładzie chcemy przekonwertować wyniki z funkcji GETDATE, więc to ustawienie bezpośrednio wpływa na skróconą nazwę miesiąca funkcji konwersji SQL.
kolejna kwestia dotyczy formatu roku. W pewnych okolicznościach możemy użyć parametru style, który nie zwraca formatu century, ale ten przypadek może powodować pewne mylące sytuacje. Tak jak w poniższej próbce mamy dwie różne daty, a także te daty przechowują różne lata, jednak wyjście funkcji konwersji SQL jest podobne.,
TRY_CONVERT ()
funkcja SQL TRY_CONVERT jest zaawansowaną formą funkcji konwersji SQL. Główną zaletą funkcji SQL TRY_CONVERT jest ochrona przed błędami konwersji danych podczas wykonywania zapytań. Jest możliwe, że możemy doświadczyć błędów w procesie konwersji danych z tajną operacją SQL z powodu nieodpowiednich lub brudnych danych. Jednak funkcja SQL TRY_CONVERT pozwala nam uniknąć tego typu błędów. Jednocześnie nie ma różnic w składni między funkcjami SQL CONVERT i TRY_CONVERT., Funkcja SQL TRY_CONVERT Zwraca wartość NULL, jeśli konwersja danych wygeneruje błąd. W poniższym przykładzie najpierw spróbujemy przekonwertować wartość znaku na liczbę całkowitą za pomocą funkcji konwersji SQL i Ta operacja zwróci błąd.,
1
|
wybierz Konwertuj(int,’anystring') jako convertfunc
|
z drugiej strony, jeśli użyjemy funkcji SQL try_convert zamiast funkcji SQL convert dla tego samego zapytania, zwróci ona wartość null.,
1
|
SELECT TRY_CONVERT(INT,’AnyString') AS ConvertFunc
|
Conclusion
In this article, we thoroughly reviewed the SQL CONVERT function syntax, details and significant considerations. Data conversion processes have wide usage, in practice, therefore in this article we demonstrated various examples., Zalecam ostrożność przy konwersji typu danych daty/czasu, jeśli twoja baza danych jest używana w różnych krajach. Podobnie formatowanie do typów danych Data/Czas jest kolejnym ważnym punktem.
- Autor
- Ostatnie posty
większość swojej kariery koncentruje się na administrowaniu i rozwoju baz danych SQL Server. Obecnie zajmuje się administracją baz danych i Business Intelligence. Możesz go znaleźć na LinkedIn.,
Zobacz wszystkie posty Esat Erkec
- pierwsze kroki z programowaniem SQL – 3 lutego 2021
- Jak odczytać plan wykonania ze wszystkimi szczegóły – 28 stycznia 2021
- SQL SELECT Top zestawienie i przykłady – 25 stycznia 2021
Dodaj komentarz