Funktioner til konvertering og formatering
Igen først en lille oversigt
| Funktion | Beskrivelse |
| CAST(felt AS datatype) |
Konverterer feltet til datatypen |
| CONVERT(datatype, felt, (evt. datoformat)) |
Konverterer feltet til datatypen, men her med mulighed for at angive datoformatet |
| FORMAT(felt, format) |
Viser feltet i som angivet i formatet |
Og vi har nok også brug for en oversigt over datatyper
| Datatype | Beskrivelse |
| char(n) |
Fast bredde tekst. Max 8.000 tegn |
| varchar(n) |
Variabel tekst. Max 8.000 tegn |
| varchar(max) |
Variabel tekst. Max. 1.073.741.824 tegn |
| text |
Variabel tekst. Max 2Gb tekst |
| nchar(n) |
Fast bredde unicode tekst. Max 4.000 tegn |
| nvarchar(v) |
Variabel unicode tekst. Max 4.000 tegn |
| nvarchar(max) |
Variabel unicode tekst. Max 536.870.912 tegn |
| ntext |
Variabel unicode tekst. Max 2Gb tekst |
| bit |
0, 1 eller NULL |
| binary(n) |
Fast bredde binær streng. Max 8.000 bytes |
| varbinary(n) |
Variabel binær streng. Max 8.000 bytes |
| varbinary(max) |
Variabel binær streng. Max 2Gb data |
| image |
Variabel binær streng. Max 2Gb data |
| tinyint |
Heltal mellem 0 og 255 |
| smallint |
Heltal mellem -32.768 og 32.767 |
| int |
Heltal mellem -2.147.483.648 og 2.147.483.647 |
| bigint |
Heltal mellem -9.223.372.036.854.775.808 and 9.223.372.036.854.775.807 |
| decimal(p,s) |
Tillader tal mellem -10^38 +1 to 10^38 –1. p er antallet af ciffre i tallet - skal være mellem 1 og 38 (default er 18) s er antallet af ciffre i tallet til højre for decialkommaet - skal være mellem 0 og p (default er 0) |
| numeric(p,s) |
Som decimal(p,s) |
| smallmoney |
Beløb mellem -214.748,3648 og 214.748,3647 |
| money |
Beløb mellem -922.337.203.685.477,5808 to 922.337.203.685.477,5807 |
| float(n) |
Tal mellem -1,79E + 308 og 1,79E + 308. Brug float(24) for store tal og float(53) for meget store tal. |
| real |
Tal mellem -3,40E + 38 og 3,40E + 38 |
| datetime |
Fra 1. januar 1753 til 31. december 9999 med en nøjagtighed på 3,33 millisekunder |
| datetime2 |
Fra 1. januar 0001 til 31. december 9999 med en nøjagtighed på 100 nanosekunder |
| smalldatetime |
Fra 1. januar 1900 til 5. juni 2079 med en nøjagtighed på 1 minut |
| date |
Kun dato. Fra 1. januar 0001 til 31. december 9999 |
| time |
Kun tid med nøjagtighed på 100 nanosekunder |
| datetimeoffset |
Som datetime2, men med tilføjelse af tidszone |
| timestamp |
Gemmer et unikt nummer, der bliver opdateret hver gang en række bliver oprettet eller ændret. Hver tabel kan kun have ét timestamp felt |
| sql_variant |
Gemmer op til 8.000 bytes data af forskellig datatype - dog ikke text, ntext eller timestamp |
| uniqueidentifier |
Gemmer en unik identifier (GUID) |
| xml |
Bruges til XML formateret data. Max 2Gb |
| cursor |
Bruges til at gemme en markør, der bruges i database operationer |
| table |
Bruges til at gemme et resultatsæt til senere behandling |
Lidt eksempler
CAST og CONVERT minder rigtig meget om hinanden - vi kigger primært på CONVERT og tager et par eksempler
SELECT
'Født: ' + CONVERT(varchar, [BirthDate]) as Fdag
FROM Employee
Prøv det og se, hvordan tekst og dato på magisk vis bliver lagt sammen.
Man kan så også skrive
SELECT
'Født: ' + CONVERT(varchar, [BirthDate], 105) as Fdag
FROM Employee
Prøv igen og se, at datoen nu bliver formateret, som vi gerne vil have det (tror jeg).
Det hemmelige nummer 105 har jeg fundet på siden her: http://msdn.microsoft.com/en-us/library/ms187928.aspx hvor du kan se andre interessante hemmelige numre.
FORMAT bruges til tal og datoer og det kan se sådan her ud:
SELECT
FORMAT([BirthDate], 'dd-MM-yyyy') as Fdag,
FORMAT([VacationHours], '0.00 timer') as FerieTimer
FROM Employee
Se, hvad det giver. Nok ikke den store overraskelse...
Man kan også gøre sådan her
SELECT
FORMAT([BirthDate], 'd', 'da-DK') as Fdag,
FORMAT([VacationHours], 'c', 'da-DK') as FerieTimer
FROM Employee
Prøv det...
Ja, det var ikke helt som forventet - 'd' står, som du nok har gættet for date og 'c' for currency - så ja, det giver ikke meget mening i denne sammenhæng...
Læs lidt mere om format her
http://technet.microsoft.com/en-us/library/hh213505.aspx