Adattípusok használata
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
...
...