Praca z typami danych

Ukończone

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

Ntext

datetimeoffset

uniqueidentifier

numeryczne

xml

pieniędzy

obszary geograficzne

smallmoney

Geometrii

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 - Czarny, 58

706: HL Road Frame - Czerwony, 58

707: Kask Sport-100, Czerwony

708: Kask sport-100, czarny

...

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 - Czarny, 58

706: HL Road Frame - Czerwony, 58

707: Kask Sport-100, Czerwony

708: Kask sport-100, czarny

...

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

...

...