SQLShack

Introducere

O sarcină comună pentru începători este să învețe cum să facă un SQL converteste data și să lucreze pentru a le converti data în alte tipuri de date sau să convertească alte tipuri de date în date.

Aici, în acest articol, vom explica cum să lucrăm și să convertim datele în diferite formate sau viceversa.

Requizite

  1. SQL Server instalat. Începând cu SQL Server 2008

Exemplu

Primul exemplu va fi simplu, avem o coloană varchar cu o dată într-un tabel, dar trebuie să convertim varcharul în dată. Trebuie să facem un SQL convert date.

Aici este scriptul pentru a crea tabelul cu date:

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

CREATE TABLE .(
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 . (, ) VALUES (1, N’02-03-2005′)
INSERT . (, ) VALUES (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)

Dorim să convertim coloana date din nvarchar(100) într-o dată.

Pentru a face acest lucru, vom încerca să modificăm designul tabelului:

Vom încerca să schimbăm Data Type în smalldatetime:

Veți primi următorul mesaj de eroare:

Salvarea modificărilor nu este permisă. Modificările pe care le-ați făcut necesită ca următoarele tabele să fie abandonate și recreate din nou. Fie ați făcut modificări la un tabel care nu poate fi recreat, fie ați activat opțiunea Prevent saving changes that require the table to be re-created.

Pentru a rezolva această eroare, în SSMS mergeți la Tools > Options menu:

În Options, mergeți la Designers >Table and Database Designers și debifați opțiunea Prevent saving changes that require table re-creation:

Această opțiune va dezactiva opțiunea de a împiedica salvarea recreării tabelelor. Atunci când modificați tipul de date al coloanei, aceasta necesită recrearea tabelului.

Acum, puteți salva proiectarea și tabelul dvs. va fi convertit în data și data de conversie SQL este finalizată:

Funcții de conversie

T-SQL conține funcții pentru a converti tipurile de date. Vom folosi CAST și CONVERT pentru a face o conversie de date SQL.

Să începem mai întâi cu CAST:

Cum să convertim din varchar, nvarchar, char, nchar în sql date folosind CAST

Exemplul următor, va arăta cum să convertim caracterele într-un tip datatime date folosind funcția CAST:

1
2

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

Exemplul declară o variabilă numită vardate și apoi această variabilă care este un varchar este convertită în datetime cu ajutorul funcției CAST.

Nota: Pentru mai multe informații despre funcția CAST, consultați acest link: CAST și CONVERT (Transact-SQL)

Cum se face o conversie SQL a datei din varchar, nvarchar, char, nchar în data folosind CONVERT

CONVERT este o funcție care poate face același lucru ca și CAST în scenariul anterior.

1
2

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

Codul T-SQL face același lucru ca și cast, dar folosește funcția CONVERT. Avantajul funcției CONVERT este că puteți schimba cu ușurință formatul datei folosind argumentul style.

De exemplu, dacă doriți ca data să fie în format ISO, puteți utiliza următoarea propoziție T-SQL:

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

Cum se convertește data sql în diferite formate în T-SQL

Următorul exemplu arată cum se convertește formatul datei în diferite formate.

Pentru formatul Japananes:

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

Pentru formatul USA:

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

Pentru formatul ANSI:

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

Pentru formatul britanic:

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

Pentru formatul german:

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

Pentru formatul italian:

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

Pentru formatul implicit european:

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

Pentru ODBC Canonical:

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

Aveți întotdeauna opțiunea de a utiliza funcția FORMAT pentru a obține data în formatul pe care îl doriți:

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

FORMAT este mai ușor de manevrat datele și de utilizat formatul pe care îl preferați, deoarece nu trebuie să cunoașteți stilul. Cu toate acestea, din experiența mea, văd o mulțime de coduri care utilizează funcțiile CAST și CONVERT, așa că, este mai bine să le cunoașteți.

Nota: Pentru mai multe informații despre funcția FORMAT, consultați acest link: FORMAT (Transact-SQL)

Probleme legate de operațiile SQL de conversie a datelor

Atunci când încercați să faceți conversia în date, nu este întotdeauna posibil. Următorul exemplu arată o eroare comună:

1
2

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

Mesajul de eroare este următorul:

Msg 242, Level 16, State 3, Line 22

Conversia unui tip de date varchar într-un tip de date datetime a avut ca rezultat o valoare în afara intervalului.

Aveți nevoie de separatori pentru data, cum ar fi un „/”, un „.” sau un „-„.

Exemplul următor, modifică șirul din 11242016 în 11-24-2016 și apoi îl convertește în data sql:

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

Folosim substring pentru a concatena „-” pentru a folosi un format de dată acceptabil și apoi folosim funcția CONVERT pentru a converti caracterele în date sql.

Tipuri de date de date

În SQL Server, există mai multe tipuri de date de date:

  • Time returnează orele, minutele, secundele și nanosecundele (hh:mm:ss.nnnnnn)
  • Date returnează anul, lunile și zilele (yyyy-mm-dd)
  • Datetime returnează date cu acest format: YYYY-MM-DD hh:mm:ss
  • Smalldatetime returnează data cu acest format: YYYY-MM-DD hh:mm:ss
  • Datetime2 este similar cu Datetime, dar are mai multă precizie (YYYY-MM-DD hh:mm:ss
  • Datetime2 este similar cu Datetime, dar are mai multă precizie (YYYY-MM-DD hh:mm:ss)
  • Datetimeoffset are precizia lui datetime2, dar este utilizat pentru fusurile orare în UTC

SQL convertește data în număr întreg

Dacă utilizați CONVERT sau CAST pentru a converti un datetime în număr întreg, acesta va returna numărul de zile de la 1900 până la data furnizată.

De exemplu, următorul cod T-SQL va afișa numărul de zile de la 1900 până astăzi:

1
SELECT CONVERT(INT, GETDATE())

Puteți, de asemenea, să convertiți în numere întregi anul, lunile, zilele etc. ale unei valori datatime. Următorul cod arată cum se stochează în variabile întregi ziua, luna și anul unei valori datetime:

1
2
3
4
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

Întrebări comune despre SQL convertește data în SQL Server

Nota: Următorul link conține întrebări frecvente despre funcții și date în SQL Server: Întrebări frecvente despre date în SQL Server

Concluzii

În acest articol, am învățat cum să facem o conversie SQL date în SQL Server. Am învățat cum să modificăm tipul de date într-un tabel, cum să folosim funcțiile CAST, CONVERT și FORMAT. De asemenea, am învățat despre diferitele tipuri de tipuri de date SQL.

  • Autor
  • Recent Posts
Daniel Calbimonte este Microsoft Most Valuable Professional, Microsoft Certified Trainer și Microsoft Certified IT Professional pentru SQL Server. Este un autor SSIS desăvârșit, profesor la Academii IT și are peste 13 ani de experiență în lucrul cu diferite baze de date.
A lucrat pentru guvern, companii petroliere, site-uri web, reviste și universități din întreaga lume. De asemenea, Daniel vorbește în mod regulat la conferințele și blogurile SQL Servers. El scrie materiale de instruire SQL Server pentru examenele de certificare.
De asemenea, ajută la traducerea articolelor SQLShack în spaniolă
Vezi toate postările lui Daniel Calbimonte

Ultimele postări ale lui Daniel Calbimonte (vezi toate)
  • Întrebări de interviu SQL – 3 septembrie, 2020
  • Certificări SQL – 7 august 2020
  • Istoria TSQL – 3 septembrie 2019

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.