Praca z typami danych
Kolumny i zmienne używane w języku Transact-SQL mają typ danych. Zachowanie wartości w wyrażeniach zależy od typu danych kolumny lub zmiennej, do których odwołuje się odwołanie. Na przykład, jak pokazano wcześniej, możesz użyć + operatora , aby połączyć dwie wartości ciągu lub dodać dwie wartości liczbowe.
W poniższej tabeli przedstawiono typowe typy danych obsługiwane w bazie danych programu SQL Server.
Dokładna liczba
Przybliżona liczba
Znak
Data/godzina
Plik binarny
Inne
tinyint
liczba zmiennoprzecinkowa
char
data
dane binarne
kursor
smallint
rzeczywiste
varchar
time
varbinary
hierarchyid
int
text
datetime
obraz
sql_variant
bigint
nchar
datetime2
table
bitowe
nvarchar
smalldatetime
timestamp
dziesiętne/liczbowe
ntekst
datetimeoffset
uniqueidentifier
numeryczne
xml
pieniędzy
obszary geograficzne
smallmoney
geometria
Uwaga
Aby uzyskać więcej informacji na temat różnych typów danych i ich atrybutów, odwiedź dokumentację referencyjną języka Transact-SQL.
Konwersja typu danych
Zgodne wartości typu danych mogą być niejawnie konwertowane zgodnie z potrzebami. Załóżmy na przykład, że możesz użyć + operatora , aby dodać liczbę całkowitą do liczby dziesiętnej lub połączyć wartość znaku o stałej długości i zmienną wartość varcharu. Jednak w niektórych przypadkach może być konieczne jawne przekonwertowanie wartości z jednego typu danych na inny — na przykład próba + połączenia wartości varchar i wartość dziesiętna spowoduje błąd, chyba że najpierw przekonwertowasz wartość liczbową na zgodny typ danych ciągu.
Uwaga
Niejawne i jawne konwersje mają zastosowanie do niektórych typów danych, a niektóre konwersje nie są możliwe. Aby uzyskać więcej informacji, skorzystaj z wykresu w dokumentacji referencyjnej języka Transact-SQL.
Język T-SQL zawiera funkcje ułatwiające jawne konwertowanie między typami danych
RZUTOWANIE i TRY_CAST
Funkcja CAST konwertuje wartość na określony typ danych, jeśli wartość jest zgodna z docelowym typem danych. Jeśli jest to niezgodne, zostanie zwrócony błąd.
Na przykład następujące zapytanie używa funkcji CAST do konwertowania wartości całkowitych w kolumnie ProductID na wartości varchar (z maksymalnie 4 znakami), aby połączyć je z inną wartością opartą na znakach:
SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;
Możliwy wynik tego zapytania może wyglądać mniej więcej tak:
ProductName
680: HL Road Frame -, 58
706: HL Road Frame - Czerwony, 58
707: Kask Sport-100, Czerwony
708: Kask sport-100,
...
Załóżmy jednak, że kolumna Size w tabeli Production.Product to kolumna nvarchar (zmienna długość, dane tekstowe Unicode), która zawiera pewne rozmiary liczbowe (na przykład 58) i niektóre rozmiary oparte na tekście (na przykład "S", "M" lub "L"). Następujące zapytanie próbuje przekonwertować wartości z tej kolumny na typ danych liczb całkowitych :
SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;
To zapytanie powoduje wyświetlenie następującego komunikatu o błędzie:
Błąd: Konwersja nie powiodła się podczas konwertowania wartości nvarchar "M" na typ danych int.
Biorąc pod uwagę, że co najmniej niektóre wartości w kolumnie są liczbowe, możesz przekonwertować te wartości i zignorować inne. Funkcja TRY_CAST umożliwia konwertowanie typów danych.
SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;
Wyniki tym razem mogą wyglądać następująco:
NumericSize
58
58
NULL
NULL
...
Wartości, które można przekonwertować na typ danych liczbowych, są zwracane jako wartości dziesiętne , a niezgodne wartości są zwracane jako NULL, co służy do wskazywania, że wartość jest nieznana.
Uwaga
W dalszej części tej lekcji zapoznamy się z zagadnieniami dotyczącymi obsługi wartości NULL .
KONWERTOWANIE i TRY_CONVERT
CAST to standardowa funkcja SQL ANSI służąca do konwertowania między typami danych i jest używana w wielu systemach baz danych. W języku Transact-SQL można również użyć funkcji CONVERT, jak pokazano poniżej:
SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;
Po raz kolejny to zapytanie zwraca wartość przekonwertowaną na określony typ danych, w następujący sposób:
ProductName
680: HL Road Frame -, 58
706: HL Road Frame - Czerwony, 58
707: Kask Sport-100, Czerwony
708: Kask sport-100,
...
Podobnie jak FUNKCJA CAST, funkcja KONWERTUJ ma wariant TRY_CONVERT, który zwraca wartość NULL dla niezgodnych wartości.
Kolejną zaletą używania funkcji CONVERT over CAST jest to, że funkcja CONVERT zawiera również parametr, który umożliwia określenie stylu formatu podczas konwertowania wartości liczbowych i dat na ciągi. Rozważmy na przykład następujące zapytanie:
SELECT SellStartDate,
CONVERT(varchar(20), SellStartDate) AS StartDate,
CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate
FROM SalesLT.Product;
Wyniki tego zapytania mogą wyglądać mniej więcej tak:
SellStartDate
StartDate
Sformatowane daty rozpoczęcia
2002-06-01T00:00:00.0000000
Czerwiec 1 2002 12:00
6/1/2002
2002-06-01T00:00:00.0000000
Czerwiec 1 2002 12:00
6/1/2002
2005-07-01T00:00:00.0000000
1 lipca 2005 12:00
7-1-2005
2005-07-01T00:00:00.0000000
1 lipca 2005 12:00
7-1-2005
...
...
...
Uwaga
Aby dowiedzieć się więcej na temat kodów formatowania stylów, których można używać z funkcją KONWERTUJ, zobacz dokumentację referencyjną języka Transact-SQL.
ANALIZOWANIE i TRY_PARSE
Funkcja PARSE została zaprojektowana do konwertowania sformatowanych ciągów reprezentujących wartości liczbowe lub daty/godziny. Rozważmy na przykład następujące zapytanie (które używa wartości literału, a nie wartości z kolumn w tabeli):
SELECT PARSE('01/01/2021' AS date) AS DateValue,
PARSE('$199.99' AS money) AS MoneyValue;
Wyniki tego zapytania wyglądają następująco:
DateValue
MoneyValue
2021-01-01T00:00:00.0000000
199.99
Podobnie jak w przypadku rzutowania i konwersji, funkcja PARSE ma wariant TRY_PARSE, który zwraca niezgodne wartości jako NULL.
Uwaga
Podczas pracy z typami danych dziesiętnych lub liczbowych może być konieczne zaokrąglenie do liczby całkowitej lub ustawienie punktu dziesiętnego, który można osiągnąć za pomocą dokładności i skali. Aby lepiej zrozumieć tę koncepcję dokładności i skali, zobacz dokumentację referencyjną języka Transact-SQL.
STR
Funkcja STR konwertuje wartość liczbową na wartość varchar.
Na przykład:
SELECT ProductID, '$' + STR(ListPrice) AS Price
FROM Production.Product;
Wyniki będą wyglądać mniej więcej tak:
ProductID
Cena
680
$1432.00
706
$1432.00
707
35,00 USD
...
...