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
- 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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/ssms-design-table.png)
Vi vil forsøge at ændre Datatype til smalldatetime:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-varchar-to-smalldatime-in-ssms.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-options-in-ssms.png)
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-options-in-ssms.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/uncheck-prevent-saving-changes-that-require-table.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/sql-convert-date-date-time-results-after-convert.png)
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:
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
|
:
For ODBC Canonical: For ODBC Canonical:
Du har altid mulighed for at bruge FORMAT-funktionen til at få datoen i det format, du ønsker:
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 datooperationerNår du forsøger at konvertere til dato, er det ikke altid muligt. Følgende eksempel viser en almindelig fejl:
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:
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. DatatyperI SQL Server er der flere typer datatyper:
SQL konvertere dato til heltalHvis 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:
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:
Sædvanlige spørgsmål om SQL konvertere dato i SQL ServerNote: Følgende link indeholder FAQ om funktioner og datoer i SQL Server: FAQ om datoer i SQL Server KonklusionerI 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.
![]() 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)
|