Adattípusok használata

Befejeződött

A Transact-SQL-ben használt oszlopok és változók adattípussal rendelkeznek. A kifejezések értékeinek viselkedése a hivatkozott oszlop vagy változó adattípusától függ. Például, ahogy korábban látta, az + operátorral összefűzhet két sztringértéket, vagy hozzáadhat két numerikus értéket.

Az alábbi táblázat az SQL Server-adatbázisokban támogatott gyakori adattípusokat mutatja be.

Pontos szám

Közelítő numerikus

Karakter

Dátum/Idő

Bináris

Egyéb

tinyint

float

char

dátum:

bináris

kurzor

smallint

valós szám

varchar

Idő

varbinary

hierarchiaazonosító

egész

SMS

datetime

kép

sql_variant

bigint

nchar

datetime2

tábla

egy kicsit

nvarchar

smalldatetime

timestamp

decimális/numerikus

ntext

dátum-idő eltolás

egyedi azonosító

Numerikus

xml

pénz

geography

aprópénz

geometry

Feljegyzés

A különböző adattípusokról és attribútumaikról további információt a Transact-SQL referenciadokumentációjában talál.

Adattípus-konverziók

A kompatibilis adattípus értékei szükség szerint implicit módon konvertálhatók. Tegyük fel például, hogy az + operátorral egész számot adhat hozzá egy tizedes törthez , vagy összefűzhet egy rögzített hosszúságú karakterértéket és egy változó hosszúságú varchar értéket. Bizonyos esetekben azonban előfordulhat, hogy az egyik adattípus értékeit explicit módon át kell alakítania egy másikra – például egy + érték összefűzésére való kísérlet, és a decimális érték hibát fog eredményezni, kivéve, ha először konvertálja a numerikus értéket kompatibilis sztring típusúra.

Feljegyzés

Az implicit és explicit konverziók bizonyos adattípusokra vonatkoznak, és bizonyos átalakítások nem lehetségesek. További információkért használja a diagramot a Transact-SQL referenciadokumentációjában.

A T-SQL olyan függvényeket tartalmaz, amelyek segítenek explicit módon átalakítani az adattípusokat

CAST és TRY_CAST

A CAST függvény egy értéket adott adattípussá alakít át, ha az érték kompatibilis a céladattípussal. A rendszer hibát ad vissza, ha nem kompatibilis.

Az alábbi lekérdezés például a CAST használatával konvertálja a ProductIDoszlopban lévő egész számértékeketvarchar értékekké (legfeljebb 4 karakterrel), hogy összefűzhesse őket egy másik karakteralapú értékkel:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

A lekérdezés lehetséges eredménye a következőhöz hasonló lehet:

ProductName

680: HL Road Frame - Fekete, 58

706: HL Road Frame - Piros, 58

707: Sport-100 Sisak, Piros

708: Sport-100 Sisak, Fekete

...

Tegyük fel azonban, hogy a Production.Product tábla Méret oszlopa egy nvarchar (változó hosszúságú, Unicode szöveges adat) oszlop, amely néhány numerikus méretet (például 58) és néhány szövegalapú méretet (például "S", "M" vagy "L") tartalmaz. Az alábbi lekérdezés az oszlop értékeit egész szám adattípussá próbálja konvertálni:

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Ez a lekérdezés a következő hibaüzenetet eredményezi:

Hiba: Az átalakítás sikertelen volt, amikor az "M" nvarchar értéket int adattípusra konvertálta.

Mivel az oszlop legalább néhány értéke numerikus, érdemes lehet ezeket az értékeket átalakítani, és figyelmen kívül hagyni a többit. Az adattípusok konvertálásához használhatja a TRY_CAST függvényt.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Az eredmények ezúttal a következőképpen néznek ki:

Numerikus méret

58

58

NULLA

NULLA

...

A numerikus adattípussá konvertálható értékek decimális értékként lesznek visszaadva, az inkompatibilis értékek null értékként lesznek visszaadva, amely azt jelzi, hogy egy érték ismeretlen.

Feljegyzés

A NULL értékek kezelésének szempontjait a lecke későbbi részében ismertetjük.

KONVERTÁLÁS és TRY_CONVERT

A CAST az ANSI szabványos SQL-függvénye az adattípusok közötti konvertáláshoz, és számos adatbázisrendszerben használatos. A Transact-SQL-ben a CONVERT függvényt is használhatja, ahogy az itt látható:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Ez a lekérdezés ismét a megadott adattípusra konvertált értéket adja vissza, például a következőt:

ProductName

680: HL Road Frame - Fekete, 58

706: HL Road Frame - Piros, 58

707: Sport-100 Sisak, Piros

708: Sport-100 Sisak, Fekete

...

A CAST-hez hasonlóan a KONVERTÁLÁS TRY_CONVERT variánssal rendelkezik, amely null értéket ad vissza az inkompatibilis értékekhez.

A KONVERTÁLÁS a CAST-ről való konvertálás másik előnye, hogy a KONVERTÁLÁS olyan paramétert is tartalmaz, amely lehetővé teszi a formázási stílus megadását numerikus és dátumértékek sztringekké alakításakor. Lásd példaként az alábbi lekérdezést:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

A lekérdezés eredményei a következőképpen nézhetnek ki:

ÉrtékesítésKezdetDátuma

Kezdési dátum

FormázottKezdésiDátum

2002-06-01T00:00:00.000000

2002. jún. 1. 12:00

6/1/2002

2002-06-01T00:00:00.000000

2002. jún. 1. 12:00

6/1/2002

2005-07-01T00:00:00.000000

2005. július 1. 12:00

2005. 7. 1.

2005-07-01T00:00:00.000000

2005. július 1. 12:00

2005. 7. 1.

...

...

...

Feljegyzés

A KONVERTÁLÁShz alkalmazható stílusformázási kódokról további információt talál a Transact-SQL referenciadokumentációjában.

PARSE és TRY_PARSE

A PARSE függvény numerikus vagy dátum/idő értékeket képviselő formázott sztringek konvertálására szolgál. Vegyük például a következő lekérdezést (amely a tábla oszlopaiból származó értékek helyett literális értékeket használ):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

A lekérdezés eredményei a következőképpen néznek ki:

Dátumérték

MoneyValue

2021-01-01T00:00:00.000000

199.99

A CAST és a CONVERT függvényhez hasonlóan a PARSE TRY_PARSE variánssal rendelkezik, amely null értékként adja vissza a nem kompatibilis értékeket.

Feljegyzés

Decimális vagy numerikus adattípusok használatakor előfordulhat, hogy egész számra kell kerekítenie, vagy be kell állítania a tizedesvesszőt, amely pontosság és skálázás révén érhető el. A pontosság és a skálázás fogalmának jobb megértéséhez tekintse meg a Transact-SQL referenciadokumentációját.

STR

Az STR függvény egy numerikus értéket varcharvá alakít át.

Példa:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Az eredmények a következőképpen néznek ki:

Termékazonosító

Ár

680

1432,00 USD

706

1432,00 USD

707.

35,00 USD

...

...