Situatie
Se intampla deseori sa avem nevoie sa afisam data fara minute si secunde, sau mai important, sa facem join intre doua coloane de tip datetime, care au minute si secunde (adica sunt de forma 2017-12-06 11:49:48.377 ) si noi dorim ca joinul sa se faca pe data, fara a tine cont de minute si secunde.
Ca atare trebuie sa reusim sa scoatem minutele si secundele pt ca data sa fie afisata si interpretata asa 2017-12-06 sau asa 2017-12-06 00:00:00.000.
Solutie
De la versiunea SQL 2008 in sus a aparut minunatul tip de data date care poate fi folosit pt conversie.
Concret, daca voi rula pe un server sql urmatorul select
select getdate()
el imi va returna data curenta, cu tot cu minute si secunde:
2017-12-06 12:11:09.843
Pt a elimina minutele si secundele voi face conversie la date a datei calendaristice de mai sus
select convert (date, getdate() )
rezultatul va fi:
2017-12-06
Evident, acea conversie se poate aplica nu doar pt o valoare sau functie ci si pentru o intreaga coloana.
Problema apare de la versiunea de SQL 2008 in jos, pentru ca acolo nu exista tipul de data date.
Ca atare solutia este sa facem conversia trecand mai intai prin tipul de data varchar.
Daca rulam instructiunea de mai jos:
select convert(datetime, convert( varchar(max), getdate() ) )
rezultatul va fi:
2017-12-06 12:13:00.000
Observam ca am scapat de secunde si sutimi, dar tot am ramas cu ore si minute.
Pentru a scapa si de acestea, trebuie sa adaugam un cod care ii spune serverului in ce format sa aduca data.
Ruland urmatoarea instructiune:
select convert(datetime, CONVERT(VARCHAR(MAX),getdate(), 102) )
obtinem
2017-12-06 00:00:00.000. Adica exact ceea ce ne doream.
Inca un lucru important:
Serverul de baze de date stie sa afiseze data in diferite formate, in functie de aceste coduri.
Mai jos sunt cele mai uzuale formatari de data pe care eu le-am folosit si rezultatele lor:
SELECT CONVERT(VARCHAR(30),GETDATE()) Dec 6 2017 12:25PM SELECTCONVERT(VARCHAR(30),GETDATE(),6) 06 Dec 17
SELECT CONVERT(VARCHAR(30),GETDATE(),10) 12-06-17
SELECT CONVERT(VARCHAR(30),GETDATE(),11) 17/12/06
SELECT CONVERT(VARCHAR(30),GETDATE(),110) 12-06-2017
SELECT CONVERT(VARCHAR(30),GETDATE(),105) 06-12-2017
SELECT CONVERT(VARCHAR(30),GETDATE(),112) 20171206
SELECT CONVERT(VARCHAR(30),GETDATE(),113) 06 Dec 2017 12:25:11:637
SELECT CONVERT(VARCHAR(30),GETDATE(),114) 12:25:11:637
Leave A Comment?