SQLShack

Introduktion

En vanlig uppgift för nybörjare är att lära sig hur man gör en SQL convert date och arbeta för att konvertera dem datum till andra datatyper eller omvandla andra datatyper till Date.

Här i den här artikeln kommer vi att förklara hur man arbetar och konverterar datum till olika format eller vice versa.

Förutsättningar

  1. SQL Server installerad. Start i SQL Server 2008

Exempel

Det första exemplet kommer att vara enkelt, vi har en varchar-kolumn med ett datum i en tabell, men vi behöver konvertera varchar till datum. Vi måste göra en SQL-konvertering av datum.

Här är det skript för att skapa tabellen med data:

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

SKAPA TABELL .(
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ÄRDEN (1, N’02-03-2005′)
INSERT . (, ) VÄRDEN (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)

Vi vill konvertera kolumnen date från nvarchar(100) till ett datum.

För att göra det kommer vi att försöka ändra utformningen av tabellen:

Vi ska försöka ändra Datatyp till smalldatetime:

Du får följande felmeddelande:

Spara ändringar är inte tillåtet. De ändringar som du har gjort kräver att följande tabeller tas bort och skapas på nytt. Du har antingen gjort ändringar i en tabell som inte kan återskapas eller aktiverat alternativet Förhindra att spara ändringar som kräver att tabellen återskapas.

För att lösa felet går du i SSMS till menyn Verktyg > Alternativ:

I Alternativ går du till Konstruktörer >Tabell- och databaskonstruktörer och tar bort krysset för Förhindra att spara ändringar som kräver att tabellen återskapas:

Det här alternativet inaktiverar alternativet för att förhindra sparande av tabellåterskapande. När du ändrar kolonnens datatyp krävs det att tabellen återskapas.

Nu kan du spara konstruktionen och din tabell kommer att konverteras till datum och SQL-konverteringen av datumet är klar:

Konverteringsfunktioner

T-SQL innehåller funktioner för att konvertera datatyper. Vi kommer att använda CAST och CONVERT för att göra en SQL-konvertering av datum.

Vi börjar med CAST först:

Hur man konverterar från varchar, nvarchar, char, nchar till sql-datum med hjälp av CAST

Följande exempel visar hur man konverterar tecken till en datumtyp med hjälp av CAST-funktionen:

1
2

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

I exemplet deklareras en variabel som heter vardate och sedan konverteras denna variabel som är en varchar till datetime med hjälp av CAST-funktionen.

Anmärkning: Mer information om CAST-funktionen finns på den här länken: Så här gör du en SQL-konvertering av datum från varchar, nvarchar, char, nchar till datum med hjälp av CONVERT

CONVERT är en funktion som kan göra samma sak som CAST i det föregående scenariot.

1
2

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

T-SQL-koden gör samma sak som cast, men använder funktionen CONVERT. Fördelen med CONVERT är att du enkelt kan ändra datumformatet med hjälp av argumentet style.

Om du till exempel vill ha datumet i ISO-format kan du använda följande T-SQL-sats:

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

Hur man konverterar sql-datum till olika format i T-SQL

Följande exempel visar hur man konverterar datumformatet i olika format.

För Japananes format:

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

För USA format:

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

För ANSI-format:

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

För brittiskt format:

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

För tyskt format:

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

För italienskt format:

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

För europeiskt standardformat:

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

För ODBC Canonical:

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

Du har alltid möjlighet att använda FORMAT-funktionen för att få datumet i det format du vill ha:

1
SELECT FORMAT( getdate(), ’dd/MM/yy’)

FORMAT är enklare att hantera datum och använda det format du föredrar, eftersom du inte behöver känna till stilen. Enligt min erfarenhet ser jag dock mycket kod som använder funktionerna CAST och CONVERT, så det är bättre att känna till dem.

Anmärkning: Mer information om FORMAT-funktionen finns på den här länken: FORMAT (Transact-SQL)

Problem relaterade till SQL konvertera datumoperationer

När du försöker konvertera till datum är det inte alltid möjligt. Följande exempel visar ett vanligt fel:

1
2

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

Felmeddelandet är följande:

Msg 242, Level 16, State 3, Line 22

Konverteringen av en varchar-datatyp till en datetime-datatyp resulterade i ett värde utanför intervallet.

Du behöver separatorer för datumet som ett ”/”, ett ”.” eller ett ”-”.

I följande exempel ändras strängen från 11242016 till 11-24-2016 och konverteras sedan till sql-datum:

1
2
3
4
5

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

Vi använder substring för att sammanfoga ”-” så att vi får ett godtagbart datumformat och sedan använder vi CONVERT-funktionen för att konvertera tecknen till sql-datum.

Datatyper för datum

I SQL Server finns det flera typer av datatyper för datum:

  • Tid returnerar timmar, minuter, sekunder och nanosekunder (hh:mm:ss.nnnnnn)
  • Datum returnerar år, månader och dagar (ååååååå-mm-dd)
  • Datumtid returnerar data med detta format: YYYYYY-MM-DD hh:mm:ss
  • Smalldatetime returnerar datum i detta format: YYYYYY-MM-DD hh:mm:ss
  • Datetime2 liknar Datetime, men har högre precision (YYYYY-MM-DD hh:mm:ss)
  • Datetimeoffset har samma precision som datetime2, men används för tidszoner i UTC

SQL konvertera datum till heltal

Om du använder CONVERT eller CAST för att konvertera en datetime till heltal, returneras antalet dagar sedan år 1900 till det angivna datumet.

Följande T-SQL-kod visar till exempel antalet dagar från 1900 till idag:

1
SELECT CONVERT(INT, GETDATE())

Du kan också konvertera år, månader, dagar osv. i ett datumtidsvärde till heltal. Följande kod visar hur man i heltalsvariabler lagrar dag, månad och år för ett datumtidsvärde:

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

Common Questions about SQL convert date in SQL Server

Note: Följande länk innehåller FAQ om funktioner och datum i SQL Server: FAQ om datum i SQL Server

Slutsatser

I den här artikeln har vi lärt oss hur man gör en SQL convert date i SQL Server. Vi lärde oss hur man ändrar datatypen i en tabell, hur man använder funktionerna CAST, CONVERT och FORMAT. Vi lärde oss också om de olika typerna av SQL-datatyper.

  • Author
  • Recent Posts
Daniel Calbimonte är Microsoft Most Valuable Professional, Microsoft Certified Trainer och Microsoft Certified IT Professional för SQL Server. Han är en skicklig SSIS-författare, lärare vid IT-akademier och har över 13 års erfarenhet av att arbeta med olika databaser.
Han har arbetat för regeringen, oljebolag, webbplatser, tidskrifter och universitet runt om i världen. Daniel talar också regelbundet på SQL Servers konferenser och bloggar. Han skriver SQL Server-utbildningsmaterial för certifieringsprov.
Han hjälper också till med att översätta SQLShack-artiklar till spanska
Se alla inlägg av Daniel Calbimonte

Nästa inlägg av Daniel Calbimonte (se alla)
  • SQL-intervjufrågor – 3 september, 2020
  • SQL-certifieringar – 7 augusti 2020
  • TSQL-historia – 3 september 2019

Lämna ett svar

Din e-postadress kommer inte publiceras.