Typy danych SQL Server / Transact-SQL

Typy danych SQL Server / Transact-SQL – wprowadzenie

Dlaczego takie ważne jest wybranie właściwego typu danych dla naszych kolumn i zmiennych w MsSQL Server? Każda dana zarówno ta przechowywana w kolumnie tabeli, jak i zmienna w Transact-SQL posiada swój typ danych i zapisana jest w określony sposób. Wynika z tego m.in.:

  • ile zajmuje miejsca w bazie,
  • jakie wartości może przyjmować
  • jak SQL Server będzie daną interpretował.

Daty zapisujemy w typach danych dat i czasu. Liczby zapisujemy w typach liczbowych. Tekst zapisujemy w typach danych przystosowanych do przechowywania tekstu. Przykładowo na liczbach zapisanych jako tekst nie możesz wykonywać działań arytmetycznych. W SQL Server wyróżniamy następujące grupy typów danych:

  • Liczbowe
  • Tekstowe
  • Daty i czasu
  • Binarne
  • Pozostałe

W kolejnych rozdziałach opiszę wykorzystanie większości typów danych w Transact-SQL. W tym rozdziale przedstawiam najważniejsze typy danych, z których powinieneś korzystać.

Najważniejsze typy danych SQL Server / Transact-SQL

SQL Server oferuje nam kilkadziesiąt typów danych. Najważniejsze z nich do zapamiętania to: BITINT, BIGINT, FLOAT, CHAR, NCHARVARCHAR, NVARCHARDATETIME2, DATETIME, VARBINARY. To właśnie te typy danych powinieneś zapamiętać z kursu SQL Server. Opis tych typów zamieszczam poniżej:

Typ danychOpisZakresZajmowana przestrzeń w bajtach (B)
bitTyp danych długiści jednego bita. Przechowuje wartość 1, 0 lub null.0, 1, null1B dla każdych 8 kolumn o tym typie w tabeli
intTyp do przechowywania dużych liczb całkowitych.-2^31 (-2,147,483,648) do 2^31-1 (2,147,483,647)4B
bigintTyp do przechowywania bardzo dużych liczb całkowitych.-2^63 (-9,223,372,036,854,775,808) do 2^63-1 (9,223,372,036,854,775,807)8B
float [n]Typ do przechowywania liczb zmiennoprzecinkowych o precyzji do 15 miejsc po przecinku.– 1.79E+308 do -2.23E-308, 0 i 2.23E-308 do 1.79E+3084B dla precyzji 7 miejsce po przecinku lub 8B dla precyzji 15 miejsc po przecinku.
char [ ( n ) ]Typ do przechowywania danych tekstowych o stałej długości znaków.Do 8000 znaków.do 8000B
varchar[ ( n | max ) ]Typ do przechowywania danych tekstowych o zmiennej długości znaków.Do 8000 znaków.Zadeklarowana długość lub 2B + 2^31-1 bytes (2 GB) dla deklaracji max.
nchar [ ( n ) ]Typ do przechowywania danych tekstowych o stałej długości znaków. Obsługuje UNICODE.Do 4000 znaków. 1 znak to 2Bdo 8000B
nvarchar [ ( n | max ) ]Typ do przechowywania danych tekstowych o zmiennej długości znaków. Obsługuje UNICODE.Do 4000 znaków. 1 znak to 2BZadeklarowana długość x2 lub 2B + 2^31-1 bytes (2 GB) dla deklaracji max.
datetime2Typ do przechowywania daty o elementach rok, miesiąc, dzień, godzina, minuta, sekunda, precyzja 100ns, strefa czasowa.0001-01-01 – 9999-12-31 23:59:59.99999996 B dla precyzji mniejszej niż 10ms; 7 B dla precyzji 1ms i 0,1ms. 8B dla wyższych precyzji.
datetimeTyp do przechowywania daty o elementach rok, miesiąc, dzień, godzina, minuta, sekunda, precyzja 1ms.1753-01-01 – 9999-12-31 23:59:59.9978B

Przykład wykorzystania typów na danych z tabeli

Poniżej przykład tworzenia tabeli w SQL Server z głównymi typami danych. Po utworzeniu tabeli następuje INSERT przykładowych wartości do tabeli. Zwróć uwagę na to, że w przypadku typów binarnych najpierw konwertujemy dane na typ binarny. Możemy to zrobić za pomocą funkcji CAST lub CONVERT.

--tomaszkenig.pl
CREATE TABLE tblDataTypes (
col_bit bit,
col_int int,
col_bigint bigint,
col_float float,
col_char char(10),
col_varchar_1 varchar(255),
col_varchar_2 varchar(max),
col_nchar nchar(15),
col_nvarchar_1 nvarchar(50),
col_nvarchar_2 nvarchar(max),
col_datetime datetime,
col_datetime2 datetime2,
col_varbinary_1 varbinary(2),
col_varbinary_2 varbinary(max)
);
go

Następnie do utworzonej tabeli możesz wprowadzić dane rzeczywiste

insert into tblDataTypes values 
(1,123456,99999999999,12345.123456789123456, 'tekst 1', 'tekst 2', 'tekst 3', 'tekst 4', 'tekst 5','tekst 6', getdate(), '2019-01-01 21:59:12.1234567', cast('ab' as varbinary), cast('Kurs SQL Server zapis binarny' as varbinary));
go

select * from tblDataTypes;
go
Typy danych SQL Server
Typy danych SQL Server

Zmiana typów danych. Konwersja typów danych w SQL Server

W jaki sposób zmienić typ danych w SQL Server? Można to zrobić za pomocą dwóch funkcji: CONVERT lub CAST. Funkcja CAST jest używana także w bazach innych niż tworzonych w oparciu o SQL Server. Funkcja CONVERT poza samą zmianą typu umożliwia w niektórych przypadkach nadanie formatu danych wyjściowych. Pamiętaj, że przy konwersji typów danych, dane muszą być konwertowalne. Tzn. Nie przekowertujesz danych o typie tekstowym na liczbę. Jest natomiast możliwość wykonanina operacji odwrotnej, tzn. konwersja liczby na tekst.

Zmiana typu danych za pomocą funkcji CAST wykonywana jest za pomocą następującej składni:

CAST(wartość AS nowy_typ_danych)

Zmiana typu danych za pomocą funkcji CONVERT wykonywana jest za pomocą następującej składni:

CONVERT( nowy_typ_danych , wartość, [format])

Przykład zastosowania CAST i CONVERT poniżej:

use adventureworks
go 

select 
a.ListPrice,
CAST(a.ListPrice AS int) as ListPrice_int_cast,
CONVERT(int, a.ListPrice) as ListPrice_int_conv,
a.ModifiedDate,
CAST(a.ModifiedDate AS DATE) as ModifiedDate_dt_cast,
CONVERT(date, a.ModifiedDate, 20) as ModifiedDate_dt_conv
from AdventureWorks.Production.Product a

;
Kurs SQL Server – Typy danych. Konwersja typów danych

Poniższe informacje to treści, do których możesz wrócić. Nie stanowią części kursu SQL Server. Traktuj te informacje jako coś, do czego możesz wrócić w celu uzupełnienia wiedzy. Nie próbuj nauczyć się ich na pamięć.

Lista wszystkich typów danych w SQL Server / Transact-SQL

Poniżej spis wszystkich typów danych wykorzystywanychh w bazach SQL Server wraz z opisem:

Przykład deklaracji zmiennych i typów danych w Transact-SQL

W nieco inny sposób wygląda pisanie podprogramów w Transact-SQL. Pisząc np procedurę składowaną lub funkcję, na początek powinniśmy zadeklarować zmienną o określonym typie danych. Następnie przypisujemy do zmiennej wartość, którą możemy już użyć w programie.

DECLARE @bitX bit = 1;
DECLARE @intX int = 1233645;
DECLARE @bigX bigint = 123456789;
DECLARE @floX float = 12345.123456789123456;
DECLARE @charX char(10) = 'tekst 1';
DECLARE @varX varchar(255) = 'tekst 2';
DECLARE @varX2 varchar(max) = 'tekst 3';
DECLARE @nchX2 nchar(15) = 'tekst 4';
DECLARE @nvaX1 nvarchar(50) = 'tekst 5';
DECLARE @nvaX2 nvarchar(max) = 'tekst 6';
DECLARE @dtmX datetime = getdate();
DECLARE @dtmX2 datetime2 = '2019-01-01 21:59:12.1234567';
DECLARE @vbX1 varbinary(2) = cast('ab' as varbinary);
DECLARE @vbX2 varbinary(max) = cast('Kurs SQL Server zapis binarny' as varbinary);

SELECT @bitX,@intX,@bigX,@floX,@charX,@varX,@varX2,
@nchX2, @nvaX1, @nvaX2,@dtmX,@dtmX2,@vbX1,@vbX2
;
Typy danych T-SQL
Typy danych T-SQL

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *