Kaip grąžinti tik datą iš SQL Server DateTime duomenų tipo

 SELECT GETDATE() 

Grąžinimas: 2008-09-22 15:24:13.790

Noriu šios dienos dalies be laiko dalies: 2008-09-22 00:00:00.000

Kaip tai gauti?

1214
22 сент. nustatė eddiegroves rugsėjo 22 d 2008-09-22 06:31 '08, 6:31, 2008-09-22 06:31
@ 36 atsakymai
  • 1
  • 2

SQL Server 2008 ir vėlesnėse versijose turite atlikti konversiją:

 SELECT CONVERT(date, getdate()) 

Senesnėse versijose galite atlikti šiuos veiksmus:

 SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date)) 

Pavyzdžiui

 SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

suteikia man

 2008-09-22 00:00:00.000 

Argumentai "už":

  • Nereikia atlikti jokios „varchar“ duomenų konvertavimo
  • Nereikia galvoti apie lokalę.
1817 m
22 сент. atsakymą pateikė aku 22 sep. 2008-09-22 06:34 '08 6:34 am. 2008-09-22 06:34

„SQLServer 2008“ dabar turi datos duomenų tipą, kuriame yra tik data be laiko komponento. Kiekvienas, kuris naudojasi „SQL Server 2008“ ir vėliau, gali atlikti šiuos veiksmus:

border=0
 SELECT CONVERT(date, GETDATE()) 
627
24 сент. Atsakymas pateikiamas BenR 24 rugsėjis. 2008-09-24 16:02 '08 4:02 pm 2008-09-24 16:02

Jei naudojate SQL 2008 ar naujesnę versiją:

 select cast(getdate() as date) 
127
31 янв. atsakymas pateikiamas abatishchev 31 sausis 2011-01-31 12:44 '11, 12:44, 2011-01-31 12:44

„DATEADD“ ir „DATEDIFF“ yra geriau nei „Varchar“ konvertavimas. Abi užklausos turi tą patį vykdymo planą, tačiau vykdymo planai daugiausia susiję su duomenų prieigos strategijomis ir ne visada rodo netiesiogines išlaidas, susijusias su procesoriaus laiku, praleistą visose dalyse. Jei abi užklausos rodomos prieš lentelę su milijonais eilučių, procesoriaus laikas, naudojant DateDiff, gali būti beveik 1/3 procesoriaus konversijos laiko!

Jei norite peržiūrėti užklausos vykdymo planus:

 set showplan_text on GO 

DATEADD ir DATEDIFF veiks CONVERT_IMPLICIT.

Nors „CONVERT“ sprendimas yra paprastesnis ir lengviau skaitomas, tai yra lėčiau. Nereikia grįžti į datetime (tai netiesiogiai atlieka serveris). Po to „DateAdd“ metodas „DateDiff“ taip pat nereikalingas, nes sveikasis skaičius taip pat bus netiesiogiai konvertuojamas atgal į datetime.


SELECT CONVERT (varchar, MyDate, 101) IŠ DATATable

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101))) |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable])) 

SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) NUO DATATable

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0)))) |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable])) 

Naudojant FLOOR (), kadangi siūlomas @digi metodas yra geresnis nei DateDiff, tačiau nerekomenduojama, nes datetime liejimas plūdei ir atgal ne visada suteikia pradinę vertę.

Prisiminkite vaikinus: nepasitikėkite niekuo. Peržiūrėkite našumo statistiką ir išbandykite juos patys!

Būkite atsargūs, kai patikrinate rezultatus. Pasirinkus daugelį eilių klientui, paslėpsite našumo skirtumą, nes užtrunka ilgiau, kol eilutės bus siunčiamos tinkle nei atlikti skaičiavimus. Todėl įsitikinkite, kad visų eilučių darbą atlieka serveris, tačiau klientui nėra siunčiamas eilutės rinkinys.

Kai kurie žmonės, atrodo, turi painiavą, kai talpyklos optimizavimas veikia užklausas. Dviejų užklausų atlikimas vienoje partijoje arba atskirose partijose neturi įtakos spartinimui. Tokiu būdu galite rankiniu būdu baigti talpyklą arba kelis kartus paleisti prašymus pirmyn ir atgal. Bet koks užklausos Nr. 2 optimizavimas taip pat turės įtakos vėlesnėms užklausoms, todėl, jei norite, išmeskite # 1.

Čia pateikiami visi scenarijų testai ir rezultatų rezultatai , kurie įrodo, kad DateDiff yra žymiai greičiau nei konvertuojant į varchar.

64
22 сент. Atsakymą pateikė Ricardo C 22 sep. 2008-09-22 11:04 '08 at 11:04 2008-09-22 11:04
 SELECT CONVERT(VARCHAR(10),GETDATE(),111) 
34
22 сент. Atsakymą pateikė Nescio rugsėjo 22 d 2008-09-22 06:33 '08 at 6:33 am 2008-09-22 06:33
 SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)) 
30
22 сент. Cade Roux atsakymas, rugsėjo 22 d 2008-09-22 06:33 '08 at 6:33 am 2008-09-22 06:33

Grįžti į datos formatą

CAST („OrderDate AS“ data)

Minėtas kodas veiks „SQL Server 2010“

Jis grįš 2013 12 12

„SQL Server 2012“ naudokite toliau pateiktą kodą.

 CONVERT(VARCHAR(10), OrderDate , 111) 
17
19 дек. Atsakymą pateikė Mahesh ML 19 d. 2013-12-19 09:48 '13, 9:48, 2013-12-19 09:48

Galite naudoti CONVERT funkciją, jei norite grąžinti tik datą. Žr. Toliau pateiktas nuorodas:

Data ir laikas manipuliavimas SQL Server 2000

CAST ir CONVERT

Sintaksė naudojant transformavimo funkciją yra:

 CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 
16
22 сент. Atsakymas duotas DaveK 22 Sep. 2008-09-22 06:34 '08 6:34 am. 2008-09-22 06:34
 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011 
11
22 сент. Atsakymą pateikė Rushda rugsėjo 22 d 2011-09-22 15:21 '11 prie 15:21 2011-09-22 15:21

Jei norite naudoti CONVERT ir gauti tą patį rezultatą, kaip ir pradinis klausimas, ty yyyy-mm-dd, tada naudokite CONVERT(varchar(10),[SourceDate as dateTime],121) tą patį kodą, kaip ir ankstesnis pora atsako, bet kodas, kurį reikia konvertuoti į yyyy-mm-dd su brūkšniu, yra 121.

Jei antrą kartą galiu gauti savo muilo dėžutę, šis formatavimas nesusijęs su duomenų lygiu ir kodėl tai neįmanoma be kvailų „potvynių“, prieš SQL Server 2008, kai įvedami tikrieji duomenų duomenų tipai. Atlikdami tokius duomenų lygio keitimus, DBVS yra didžiulė pridėtinės vertės švaistymas, tačiau, svarbiausia, antra, tai darote kažką panašaus, iš esmės sukūrėte našlaičių duomenis atmintyje, kurią manau grįžti į programą. Negalite grąžinti jo į kitą 3NF + stulpelį arba palyginti jį su nieko, parašytu be grąžinimo, taigi viskas, ką darėte, yra įvesti gedimo taškus ir pašalinti reliacinę nuorodą.

Jūs visada turite eiti į priekį ir grąžinti dataTime duomenų tipą į skambinančiąją programą ir PRESENTACIJOS lygiu, kad galėtumėte atlikti bet kokius koregavimus. Kai pradėsite konvertuoti daiktus, prieš grąžindami juos skambinančiam asmeniui, pašalinsite visą viltį, kad iš paraiškos bus gautas referencinis vientisumas. Taip bus išvengta UPDATE arba DELETE operacijos, jei nedarysite jokių rankinių pakeitimų, kurie vėl atskleidžia jūsų duomenis į asmens / kodo / gremlin klaidą, kai nereikia.

11
26 июля '12 в 23:00 2012-07-26 23:00 Atsakymą pateikė „ Focusyn “ liepos 26 d., 12 val

Naudojant FLOOR () - tiesiog sutrumpinkite laiką.

 SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) 
11
22 сент. atsakymas duotas DiGi rugsėjo 22 d 2008-09-22 10:38 '08, 10:38, 2008-09-22 10:38
 SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0) SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE())) SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101)) 

Redaguoti: pirmieji du metodai iš esmės yra tokie patys, ir už jos ribų galite konvertuoti į Varchar metodą.

9
22 сент. Atsakymą duoda Gordonas Bellas 22 sep. 2008-09-22 06:35 '08 6:35 am. 2008-09-22 06:35
  Convert(nvarchar(10), getdate(), 101) ---> 5/12/14 Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014 
7
12 мая '14 в 17:41 2014-05-12 17:41 atsakymą pateikė Ankit Khetan , gegužės 12 d., 14 d., 17:41 2014-05-12 17:41

Norėdami gauti nurodytą rezultatą, naudoju šią komandą.

 SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE())) 

Noriu, kad tai būtų naudinga.

7
17 нояб. Atsakymą Andersonas Silva pateikė lapkričio 17 d. 2013-11-17 20:36 '13, 08:36 pm 2013-11-17 20:36

Jei naudojate „ SQL Server 2012“ ar naujesnę versiją ,

Naudokite Format() .

Jau yra keletas SQL Server atsakymų ir formatavimo tipų. Tačiau dauguma metodų yra šiek tiek dviprasmiški ir jums bus sunku prisiminti formato ar formato funkcijų numerius tam tikros datos formatui. Štai kodėl kitos SQL Server versijos turi geresnį variantą.

 FORMAT ( value, format [, culture ] ) 

Kultūros parinktis yra labai naudinga, nes galite nurodyti savo žiūrovų datą.

Turite prisiminti d (mažiems modeliams) ir D (ilgiems modeliams).

1. „d“ - trumpas datos modelis.

 2009-06-15T13:45:30 -> 6/15/2009 (en-US) 2009-06-15T13:45:30 -> 15/06/2009 (fr-FR) 2009-06-15T13:45:30 -> 2009/06/15 (ja-JP) 

2. „D“ yra ilgas datos raštas.

 2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US) 2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU) 2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE) 

Papildomi prašymo pavyzdžiai.

 DECLARE @d DATETIME = '10/01/2011'; SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result' ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result' ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result' ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result' ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result' ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result' ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result'; US English Result Great Britain English Result German Result Simplified Chinese (PRC) Result ---------------- ----------------------------- ------------- ------------------------------------- 10/1/2011 01/10/2011 01.10.2011 2011/10/1 US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result ---------------------------- ----------------------------- ----------------------------- --------------------------------------- Saturday, October 01, 2011 01 October 2011 Samstag, 1. Oktober 2011 2011年10月1日 

Jei norite daugiau formatų, galite eiti į:

7
24 авг. Somnath Muluk atsakymas, pateiktas rugpjūčio 24 d. 2016-08-24 10:36 '16 at 10:36 am 2016-08-24 10:36

Jei jums reikia rezultatų „varchar“ duomenų pavidalu, turite praeiti

 SELECT CONVERT(DATE, GETDATE()) --2014-03-26 SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26 

jau minėta

Jei jums reikia datos ir laiko formato rezultato, turite praeiti bet kurią iš šių užklausų.

1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111)) kaip OnlyDate - 2014-03-26 00: 00: 00.000

2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112)) kaip OnlyDate - 2014-03-26 00: 00: 00.000

3)

  DECLARE @OnlyDate DATETIME SET @OnlyDate = DATEDIFF(DD, 0, GETDATE()) SELECT @OnlyDate AS OnlyDate 

- 2014-03-26 00: 00: 00.000

7
26 марта '14 в 15:39 2014-03-26 15:39 Atsakymą pateikė Steponas Johns kovo 26 d. 14 d. 15:39 2014-03-26 15:39

Jei priskyrėte rezultatus prie stulpelio arba kintamojo, nurodykite DATE tipą ir konversiją netiesiogiai.

 DECLARE @Date DATE = GETDATE() SELECT @Date --> 2017-05-03 
6
14 мая '16 в 0:00 2016-05-14 00:00 Atsakymas suteikiamas Art Schmidt gegužės 14 d., 16 val. 0:00 2016-05-14 00:00

Manau, kad tai veiks jūsų atveju:

 CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate //here date is obtained as 1990/09/25 
6
27 нояб. Atsakymą pateikė bishnu karki lapkričio 27 d. 2013-11-27 09:16 '13, 9:16, 2013-11-27 09:16

Na, nors aš šiek tiek vėlu :) Čia yra dar vienas sprendimas.

 SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME) 

Rezultatas

 2008-09-22 00:00:00.000 

Jei naudojate SQL Server 2012 ir vėlesnę versiją, galite naudoti FORMAT() funkciją, -

 SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') 
5
13 апр. Atsakymą pateikė Krishnraj Rana balandžio 13 d. 2016-04-13 13:46 '16 at 13:46 pm 2016-04-13 13:46

Net naudojant senąjį „MSSQL Server 7.0“ kodą čia (maloniai pateikiama nuoroda ) leidžiau gauti bet kokį datą, kurio ieškojau tuo metu:

 PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE()) PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10) PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106) PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113) 

Jis padarė šią išvadą:

 1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015 1:14PM 2) Date/time in format MM-DD-YY: 02-27-15 3) Date/time in format MM-DD-YYYY: 02-27-2015 4) Date/time in format DD MON YYYY: 27 Feb 2015 5) Date/time in format DD MON YY: 27 Feb 15 6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630 
5
28 февр. Atsakymą pateikė Matt O'Brien vasario 28 d. 2015-02-28 00:16 '15 prie 0:16 2015-02-28 00:16
 DECLARE @yourdate DATETIME = '11/1/2014 12:25pm' SELECT CONVERT(DATE, @yourdate) 
4
19 нояб. Atsakymas, kurį pateikė etni 19 d 2014-11-19 23:46 '14 at 11:46 2014-11-19 23:46

Data (data ir laikas) ir DATE_FORMAT (data ir laikas,% Y-% m-% d) ir grąžina tik datą nuo datos ir laiko

3
08 июля '15 в 9:28 2015-07-08 09:28 atsakymas duotas „ Surekha“ liepos 08-15 dienomis 9:28 2015-07-08 09:28

Nuo „SQL SERVER 2012“ galite tai padaryti:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')

3
20 июля '16 в 18:58 2016-07-20 18:58 atsakymas pateikiamas xbb liepos 20 d., 16 val. 18:58 2016-07-20 18:58

kodėl nenaudojate DATE_FORMAT (savo_datetiem_column, '% d-% m-% Y')?

EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

M, d ir metų seką galite keisti iš naujo sudedant dalį '%d-%m-%Y'

3
17 мая '14 в 8:46 2014-05-17 08:46 atsakymą pateikė Janaka R Rajapaksha gegužės 17 d., 14 val. 8:46 2014-05-17 08:46

Patvirtinu šiuos dalykus, kurie nebuvo paminėti:

 DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime)) 

Jis taip pat nerūpi vietiniu arba duoda voką - nors kiekvienas „duomenų lapas“ tikriausiai atlieka matematiką. Taigi tai gali būti šiek tiek lėčiau nei duomenų perdavimo metodas, tačiau man tai daug aiškiau. Ypač tada, kai noriu grupuoti visus metus ir mėnesį (1 diena).

3
30 апр. Gerard ONeill atsakymas balandžio 30 d 2015-04-30 22:00 „15, 10 val. 2015-04-30 22:00

Jūs galite tiesiog naudoti žemiau esantį kodą, kad gautumėte tik dalį datos ir išvengtumėte laikinos dalies SQL:

 SELECT SYSDATE TODAY FROM DUAL; 
2
30 марта '16 в 1:56 2016-03-30 01:56 atsakymą pateikė Shyam Bhimani kovo 16 d. 16 val. 1:56 2016-03-30 01:56

Data:

 SELECT CONVERT (data, GETDATE ()) SELECT CAST (PASIRINKTI (), kaip datą)

Laikas:

 SELECT CONVERT (laikas, GETDATE (), 114) „SELECT CAST“ („GETDATE“ (laikas))
2
21 мая '16 в 12:24 2016-05-21 12:24 Atsakymą pateikė Kris Khairallah gegužės 21 d., 16 val. 12:24 2016-05-21 12:24

Visuose atsakymuose jis nebuvo, jis gali būti ne pats efektyviausias, bet labai paprasta rašyti ir suprasti be stiliaus be sudėtingų datos funkcijų.

 SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE())))) 
2
21 окт. Bendrijos atsakymas spalio 21 d 2015-10-21 07:54 '15, 07:54 am 2015-10-21 07:54
 SELECT * FROM tablename WHERE CAST ([my_date_time_var] AS DATE)= '8/5/2015' 
2
01 сент. Atsakymas suteikiamas Binitta Mary 01 sep . 2015-09-01 16:02 '15 at 16:02 2015-09-01 16:02

„SQL Server 2000“

 CAST( ( STR( YEAR( GETDATE() ) ) + '/' + STR( MONTH( GETDATE() ) ) + '/' + STR( DAY( GETDATE() ) ) ) AS DATETIME) 
2
24 мая '16 в 12:36 2016-05-24 12:36 atsakymas pateikiamas kaub0st3r gegužės 24 d., 16 val. 12:36 2016-05-24 12:36
  • 1
  • 2

Kiti klausimai etikete arba Užduoti klausimą