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
- 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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/ssms-design-table.png)
Vi ska försöka ändra Datatyp till smalldatetime:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-varchar-to-smalldatime-in-ssms.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-options-in-ssms.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/uncheck-prevent-saving-changes-that-require-table.png)
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:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/sql-convert-date-date-time-results-after-convert.png)
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
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
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
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
- SQL-intervjufrågor – 3 september, 2020
- SQL-certifieringar – 7 augusti 2020
- TSQL-historia – 3 september 2019