Tietotyyppien käsitteleminen
Transact-SQL käytettävillä sarakkeilla ja muuttujilla on tietotyyppi. Lausekkeiden arvojen toiminta riippuu viitattavan sarakkeen tai muuttujan tietotyypistä. Kuten aiemmin näit, voit esimerkiksi käyttää + -operaattoria kahden merkkijonoarvon ketjuttamiseen tai kahden numeerisen arvon lisäämiseen.
Seuraavassa taulukossa on esitetty SQL Server -tietokannassa tuetut yleiset tietotyypit.
Tarkka numeerinen
Likimääräinen numeerinen
Merkki
päivämäärä ja aika
Binaarinen
Toinen
pienikokonaisluku
liukuluku
char
päivämäärä
binaarinen
kohdistin
smallint
todellinen
varchar
aika
varbinary
hierarchyid
kokonaisluku
lähetä tekstiviesti
päivämäärä/aika
kuva
sql_variant
isokokonaisluku
nchar
datetime2
taulukko
bitti
nvarchar
pieni päivämäärä ja aika
aikaleima
desimaalit/numerot
ntext
datetimeoffset
uniqueidentifier
numeerinen
xml
raha
paikkatieto
pienet rahat
geometriatieto
Huomautus
Lisätietoja eri tietotyypeistä ja niiden määritteistä on Transact-SQL viitedokumentaatiossa.
Tietotyyppien muuntaminen
Yhteensopivat tietotyyppiarvot voidaan implisiittisesti muuntaa pakollisiksi. Oletetaan esimerkiksi, että voit lisätä operaattorin + avulla kokonaislukuluvundesimaalilukuun tai ketjuttaa kiinteän pituisen char-arvon ja vaihtelevan pituisen varchar-arvon . Joissakin tapauksissa saatat kuitenkin joutua muuntamaan arvot eksplisiittisesti yhdestä tietotyypistä toiseksi. Esimerkiksi jos yrität yhdistää +varchar-arvon ja desimaaliarvo aiheuttaa virheen, ellet ensin muunna numeerista arvoa yhteensopivaksi merkkijonotietotyypiksi.
Huomautus
Implisiittiset ja eksplisiittiset muunnokset koskevat tiettyjä tietotyyppejä, ja jotkin muunnokset eivät ole mahdollisia. Jos haluat lisätietoja, käytä Transact-SQL ohjeissa olevaa kaaviota.
T-SQL sisältää funktioita, joiden avulla voit muuntaa tietotyyppien välillä eksplisiittisesti
CAST ja TRY_CAST
CAST-funktio muuntaa arvon määritetyksi tietotyypiksi, jos arvo on yhteensopiva kohdetietotyypin kanssa. Virhe palautetaan, jos se ei ole yhteensopiva.
Esimerkiksi seuraava kysely käyttää CAST-funktiota ProductID-sarakkeenkokonaislukuarvojen muuntamiseen varchar-arvoiksi (enintään neljä merkkiä), jotta ne voidaan liittää toisiinsa toiseen merkkipohjaiseen arvoon:
SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;
Tämän kyselyn mahdollinen tulos voi näyttää suunnilleen tältä:
Tuotenimi
680: HL Road Frame - Musta, 58
706: HL Road Frame - Punainen, 58
707: Sport-100 Kypärä, Punainen
708: Sport-100 Kypärä, Musta
...
Oletetaan kuitenkin, että Production.Product-taulukonSize-sarake on nvarchar(vaihteleva pituus, Unicode-tekstitiedot), joka sisältää joitakin numeerisia kokoja (kuten 58) ja joitakin tekstipohjaisia kokoja (kuten "S", "M" tai "L"). Seuraava kysely yrittää muuntaa tämän sarakkeen arvot kokonaislukutietotyypiksi :
SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;
Tämä kysely tuottaa seuraavan virhesanoman:
Virhe: Muunto epäonnistui muunnettaessa nvarchar-arvoa "M" tietotyyppiin int.
Koska vähintään osa sarakkeen arvoista on numeerisia, haluat ehkä muuntaa nämä arvot ja ohittaa muut arvot. voit muuntaa tietotyyppejä TRY_CAST funktion avulla.
SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;
Tämän ajan tulokset saattavat näyttää tältä:
Numeerinen koko
58
58
TYHJÄ
TYHJÄ
...
Arvot, jotka voidaan muuntaa numeeriseksi tietotyypiksi, palautetaan desimaaliarvoina , ja yhteensopimattomat arvot palautetaan TYHJÄARVONA, jonka avulla ilmaistaan, että arvo on tuntematon.
Huomautus
Tutustumme null-arvojen käsittelyyn myöhemmin tässä yksikössä huomioon otettavia seikkoja.
CONVERT ja TRY_CONVERT
CAST on SQL-vakiofunktio tietotyyppien välillä muuntamiseen, ja sitä käytetään monissa tietokantajärjestelmissä. Transact-SQL:ssä voit käyttää myös CONVERT-funktiota seuraavassa esitetyllä tavalla:
SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;
Jälleen kerran tämä kysely palauttaa määritetyksi tietotyypiksi muunnetun arvon seuraavasti:
Tuotenimi
680: HL Road Frame - Musta, 58
706: HL Road Frame - Punainen, 58
707: Sport-100 Kypärä, Punainen
708: Sport-100 Kypärä, Musta
...
CAST-funktion tavoin CONVERT-funktiolla on TRY_CONVERT variantti, joka palauttaa NULL-arvon yhteensopimattomille arvoille.
Toinen MUUNNOS-funktion käyttämisen etu MUUNNOS-funktion käytössä on se, että CONVERT-funktio sisältää myös parametrin, jonka avulla voit määrittää muotoilutyylin muuntaessasi numero- ja päivämääräarvoja merkkijonoiksi. Katso esimerkiksi seuraavaa kyselyä:
SELECT SellStartDate,
CONVERT(varchar(20), SellStartDate) AS StartDate,
CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate
FROM SalesLT.Product;
Tämän kyselyn tulokset saattavat näyttää seuraavankaltaisilta:
SellStartDate
StartDate
FormattedStartDate
2002-06-01T00:00:00.0000000
1. kesäkuuta 2002 klo 12.00
6/1/2002
2002-06-01T00:00:00.0000000
1. kesäkuuta 2002 klo 12.00
6/1/2002
2005-07-01T00:00:00.0000000
Heinä 1.7.2005 klo 12.00
7/1/2005
2005-07-01T00:00:00.0000000
Heinä 1.7.2005 klo 12.00
7/1/2005
...
...
...
Huomautus
Lisätietoja CONVERT-muunnon kanssa käytettävistä tyylimuotoilukoodeista on Transact-SQL viitedokumentaatiossa.
PARSE ja TRY_PARSE
PARSE-funktio on suunniteltu muuntamaan muotoiltuja merkkijonoja, jotka edustavat numeerisia tai päivämäärä-/aika-arvoja. Harkitse esimerkiksi seuraavaa kyselyä (joka käyttää literaaliarvoja taulukon sarakkeiden arvojen sijaan):
SELECT PARSE('01/01/2021' AS date) AS DateValue,
PARSE('$199.99' AS money) AS MoneyValue;
Tämän kyselyn tulokset näyttävät tältä:
DateValue
MoneyValue
2021-01-01T00:00:00.0000000
199.99
SAMOIN kuin CAST- ja CONVERT-funktioilla, PARSE-versiolla on TRY_PARSE, joka palauttaa yhteensopimattomat arvot arvoina NULL.
Huomautus
Kun käsittelet desimaali- tai numeerisia tietotyyppejä, sinun täytyy ehkä pyöristää kokonaislukuun tai määrittää desimaalierotin, mikä voidaan saavuttaa tarkkuudella ja skaalattavuuden avulla. Jos haluat ymmärtää tämän tarkkuuden ja skaalauksen käsitteen, katso Transact-SQL viitedokumentaatio.
STR
STR-funktio muuntaa numeerisen arvon varchar-arvoksi.
Esimerkiksi:
SELECT ProductID, '$' + STR(ListPrice) AS Price
FROM Production.Product;
Tulokset näyttävät suunnilleen tältä:
Productid
Hinta
680
1432,00 $
706
1432,00 $
707
35,00 $
...
...