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