SQLShack

Indledning

En almindelig opgave for nybegyndere er at lære, hvordan man laver en SQL konvertere dato og arbejde for at konvertere dem dato til andre datatyper eller konvertere andre datatyper til dato.

Her i denne artikel vil vi forklare, hvordan man arbejder og konvertere datoer til forskellige formater eller omvendt.

Krav

  1. SQL Server installeret. Start i SQL Server 2008

Eksempel

Det første eksempel vil være simpelt, vi har en varchar-kolonne med en dato i en tabel, men vi har brug for at konvertere varchar til dato. Vi har brug for at gøre en SQL konvertere dato.

Her er det script til at oprette tabellen med data:

1
2
3
4
5
6
7
8
9
10
11
12

OPRETTER TABEL .(
NOT NULL,
(100) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
) ON
GO
INSERT . (, ) VÆRDIER (1, N’02-03-2005′)
INSERT . (, ) VÆRDIER (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)

Vi ønsker at konvertere kolonnen dato fra nvarchar(100) til en dato.

For at gøre det, skal vi forsøge at ændre tabellens design:

Vi vil forsøge at ændre Datatype til smalldatetime:

Du vil få følgende fejlmeddelelse:

Sparring af ændringer er ikke tilladt. De ændringer, du har foretaget, kræver, at følgende tabeller skal slettes og oprettes igen. Du har enten foretaget ændringer i en tabel, der ikke kan oprettes igen, eller du har aktiveret indstillingen Forhindrer lagring af ændringer, der kræver, at tabellen oprettes igen.

For at løse denne fejl skal du i SSMS gå til menuen Værktøjer > Indstillinger:

I Indstillinger skal du gå til Designere >Tabel- og databasedesignere og fjerne markeringen af Forhindrer lagring af ændringer, der kræver, at tabellen oprettes igen:

Denne indstilling vil deaktivere muligheden for at forhindre lagring af genetablering af tabeller. Når du ændrer kolonnens datatype, kræver det, at tabellen oprettes igen.

Nu kan du gemme designet, og din tabel vil blive konverteret til dato, og SQL-konverteringsdatoen er afsluttet:

Konverteringsfunktioner

T-SQL indeholder funktioner til at konvertere datatyper. Vi vil bruge CAST og CONVERT til at foretage en SQL-konvertering af datoer.

Lad os starte med CAST først:

Sådan konverterer du fra varchar, nvarchar, char, nchar til sql-dato ved hjælp af CAST

Det følgende eksempel viser, hvordan du konverterer tegn til en dato-datatype ved hjælp af CAST-funktionen:

1
2

declare @vardate varchar(100)=’03-04-2016′
select CAST(@vardate AS datetime) AS dataconverted;

Eksemplet erklærer en variabel ved navn vardate, og derefter konverteres denne variabel, der er en varchar, til datetime ved hjælp af CAST-funktionen.

Note: Du kan få flere oplysninger om CAST-funktionen ved at se dette link: CAST og CONVERT (Transact-SQL)

Sådan laver du en SQL-konvertering af dato fra varchar, nvarchar, char, nchar til dato ved hjælp af CONVERT

CONVERT er en funktion, der kan gøre det samme som CAST i det foregående scenario.

1
2

declare @vardate varchar(100)=’03-04-2016′
select CONVERT(datetime, @vardate) as dataconverted

T-SQL-koden gør det samme som cast, men den bruger CONVERT-funktionen. Fordelen ved CONVERT er, at du nemt kan ændre formatet af datoen ved hjælp af style-argumentet.

Hvis du f.eks. vil have datoen i ISO-formatet, kan du bruge følgende T-SQL-sætning:

1
select CONVERT(nvarchar(30),getdate(), 121) as isoformat

Sådan konverterer du sql-dato til forskellige formater i T-SQL

Følgende eksempel viser, hvordan du konverterer datoformatet i forskellige formater.

For Japananes format:

1
select CONVERT(nvarchar(30),getdate(), 111) as Japanformat

For USA-format:

1
select CONVERT(nvarchar(30),getdate(), 110) as USAformat

For ANSI-format:

For ANSI-format:

1
select CONVERT(nvarchar(30),getdate(), 102) as ANSIformat

For britisk format:

For britisk format:

1
select CONVERT(nvarchar(30),getdate(), 103) as Britishformat

For tysk format:

For tysk format:

1
1
select CONVERT(nvarchar(30),getdate(), 104) as Germanformat

For italiensk format:

For italiensk format:

1
select CONVERT(nvarchar(30),getdate(), 105) as Italianformat

For europæisk standardformat:

1
:

1
select CONVERT(nvarchar(30),getdate(), 113) as EuropeDefaultformat

For ODBC Canonical:

For ODBC Canonical:

1
select CONVERT(nvarchar(30),getdate(), 120) as ODBCCanonicalformat

Du har altid mulighed for at bruge FORMAT-funktionen til at få datoen i det format, du ønsker:

1
SELECT FORMAT( getdate(), ‘dd/MM/ååå’)

FORMAT er nemmere at håndtere datoer og bruge det format, du foretrækker, fordi du ikke behøver at kende stilen. Det er dog min erfaring, at jeg ser meget kode, der bruger CAST- og CONVERT-funktionerne, så det er bedre at kende dem.

Note: Du kan finde flere oplysninger om FORMAT-funktionen på dette link: FORMAT (Transact-SQL)

Problemer i forbindelse med SQL konvertere datooperationer

Når du forsøger at konvertere til dato, er det ikke altid muligt. Følgende eksempel viser en almindelig fejl:

1
2

declare @vardate varchar(100)=’11242016′
select CONVERT(datetime, @vardate) as dataconverted

Fejlmeddelelsen lyder som følger:

Msg 242, Level 16, State 3, Line 22

Konverteringen af en varchar-datatatype til en datetime-datatype resulterede i en værdi uden for intervallet.

Du har brug for separatorer til datoen som f.eks. et “/”, et “.” eller et “-“.

I følgende eksempel ændres strengen fra 11242016 til 11-24-2016, hvorefter den konverteres til sql-dato:

1
2
3
4
5

declare @vardate varchar(100)=’11242016′
set @vardate= SUBSTRING(@vardate, 1, 2)+’-‘+ SUBSTRING(@vardate, 3, 2)+’-‘+SUBSTRING(@vardate, 5, 4)
select CONVERT(date, @vardate) as dataconverted

Vi bruger substring til at sammenkæde “-” for at bruge et acceptabelt datoformat, og derefter bruger vi CONVERT-funktionen til at konvertere tegnene til sql-dato.

Datatyper

I SQL Server er der flere typer datatyper:

  • Time returnerer timer, minutter, sekunder og nanosekunder (hh:mm:ss.nnnnnnnn)
  • Date returnerer år, måneder og dage (yyyy-mm-dd)
  • Datetime returnerer data med dette format: YYYYYY-MM-DD hh:mm:ss
  • Smalldatetime returnerer dato med dette format: YYYYYY-MM-DD hh:mm:ss
  • Datetime2 svarer til Datetime, men har større præcision (YYYYY-MM-DD hh:mm:ss)
  • Datetimeoffset den har samme præcision som datetime2, men den bruges til tidszoner i UTC

SQL konvertere dato til heltal

Hvis du bruger CONVERT eller CAST til at konvertere en datotid til heltal, returnerer den antallet af dage siden 1900 indtil den angivne dato.

Følgende T-SQL-kode vil f.eks. vise antallet af dage fra 1900 til i dag:

1
SELECT CONVERT(INT, GETDATE())

Du kan også konvertere år, måneder, dage osv. i en datetime-værdi til heltal. Følgende kode viser, hvordan man gemmer dagen, måneden og året for en datotidsværdi i heltalsvariabler:

1
2
3
4
5

declare @year int = year(getdate()))
declare @month int = month(getdate())
declare @day int = day(getdate())
select @year as year,@month as month,@day as day

Sædvanlige spørgsmål om SQL konvertere dato i SQL Server

Note: Følgende link indeholder FAQ om funktioner og datoer i SQL Server: FAQ om datoer i SQL Server

Konklusioner

I denne artikel har vi lært, hvordan man laver en SQL convert date i SQL Server. Vi lærte, hvordan man ændrer datatypen i en tabel, hvordan man bruger CAST-, CONVERT- og FORMAT-funktionerne. Vi lærte også om de forskellige typer af SQL-datatyper.

  • Author
  • Recent Posts
Daniel Calbimonte er en Microsoft Most Valuable Professional, Microsoft Certified Trainer og Microsoft Certified IT Professional for SQL Server. Han er en dygtig SSIS-forfatter, underviser på IT-akademier og har over 13 års erfaring med at arbejde med forskellige databaser.
Han har arbejdet for regeringen, olieselskaber, websteder, magasiner og universiteter rundt om i verden. Daniel taler også regelmæssigt på SQL Servers konferencer og blogger. Han skriver SQL Server-uddannelsesmateriale til certificeringsprøver.
Han hjælper også med at oversætte SQLShack artikler til spansk
Se alle indlæg af Daniel Calbimonte

Sidste indlæg af Daniel Calbimonte (se alle)
  • SQL interview spørgsmål – 3. september, 2020
  • SQL Certificeringer – August 7, 2020
  • TSQL historie – September 3, 2019

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.