Tietotyyppien käsitteleminen

Valmis

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 $

...

...