Afisarea datei fara ore, minute si secunde

Rezolvare problema (Fix IT)

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

 

 

 

 

 

 

 

Tip solutie

Permanent

Voteaza

(14 din 33 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?