yyyy - sql server date only data type




Come restituire solo la data da un datatype DateTime di SQL Server (20)

SELECT GETDATE()

Resi: 2008-09-22 15:24:13.790

Voglio che la parte di data senza la parte di tempo: 2008-09-22 00:00:00.000

Come posso averlo?


Se si utilizza SQL Server 2012 o versioni successive ,

Usa la funzione Format() .

Esistono già più risposte e tipi di formattazione per il server SQL. Ma la maggior parte dei metodi è alquanto ambigua e sarebbe difficile per te ricordare i numeri per il tipo di formato o le funzioni rispetto al formato di data specifico. Ecco perché nelle prossime versioni di SQL Server c'è un'opzione migliore.

FORMAT ( value, format [, culture ] )

L'opzione Cultura è molto utile, dato che puoi specificare la data secondo i tuoi spettatori.

Devi ricordare d (per motivi piccoli) e D (per motivi lunghi).

1. "d" - Schema della data breve.

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" - Modello a data lunga.

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)

Altri esempi nella query.

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日

Se vuoi più formati, puoi andare su:

  1. Stringhe di formato di data e ora standard
  2. Stringhe di formato di data e ora personalizzate

È possibile utilizzare il seguente per la parte di data e la formattazione della data:

DATENAME => Restituisce una stringa di caratteri che rappresenta la datapart specificata della data specificata

DATEADD => La funzione DATEPART() viene utilizzata per restituire una singola parte di una data / ora, ad esempio anno, mese, giorno, ora, minuto, ecc.

DATEPART => Restituisce un numero intero che rappresenta la datapart specificata della data specificata.

CONVERT() => La funzione CONVERT() è una funzione generale che converte un'espressione di un tipo di dati in un altro. La funzione CONVERT() può essere utilizzata per visualizzare dati di data / ora in diversi formati.


A partire da SQL SERVER 2012, puoi farlo:

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


Anche usando l'antico MSSQL Server 7.0, il codice qui (per gentile concessione di questo link ) mi ha permesso di ottenere qualsiasi formato di data che stavo cercando in quel momento:

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)

Ha prodotto questa uscita:

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

Data:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

Tempo:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)

Io preferisco il seguente che non è stato menzionato:

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

Inoltre non si preoccupa del locale o fa una doppia conversione - anche se ogni "datapart" probabilmente fa matematica. Quindi potrebbe essere un po 'più lento del metodo datediff, ma per me è molto più chiaro. Soprattutto quando voglio raggruppare solo l'anno e il mese (imposta il giorno su 1).


Penso che funzioni nel tuo caso:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

Per ottenere il risultato indicato, utilizzo il seguente comando.

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

I holpe è utile.


Questo mancava in tutte le risposte, potrebbe non essere il più efficiente, ma molto facile da scrivere e capire, non è necessario stile, nessuna funzione data complessa.

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

SE si desidera utilizzare CONVERT e ottenere lo stesso risultato della domanda originale, ovvero, aaaa-mm-gg quindi utilizzare CONVERT(varchar(10),[SourceDate as dateTime],121) stesso codice delle precedenti coppie di risposte , ma il codice da convertire in aaaa-mm-gg con trattini è 121.

Se riesco a salire sul mio soapbox per un secondo, questo tipo di formattazione non appartiene al livello dati , ed è per questo che non è stato possibile senza "trucchi" ad alto livello di overhead fino a SQL Server 2008 quando i tipi di dati datapart effettivi sono introdotto. Effettuare tali conversioni nel livello dati è un enorme spreco di spese generali sul DBMS, ma ancora più importante, nel secondo in cui si fa qualcosa del genere, in pratica si sono creati dati orfani in memoria che presumo che si ritorni a un programma. Non è possibile reinserirlo in un'altra colonna 3NF + o confrontarlo con qualsiasi cosa digitato senza ripristinare, quindi tutto ciò che hai fatto è stato introdotto come punto di errore e riferimento relazionale rimosso.

Dovresti SEMPRE andare avanti e restituire il tipo di dati dateTime al programma chiamante e nel livello PRESENTATION, apportare le modifiche necessarie. Non appena vai a convertire le cose prima di restituirle al chiamante, stai rimuovendo ogni speranza di integrità referenziale dall'applicazione. Ciò impedirebbe nuovamente un'operazione UPDATE o DELETE, a meno che non si esegua una sorta di reversione manuale, che di nuovo espone i propri dati all'errore human / code / gremlin quando non ce n'è bisogno.


Se hai bisogno di ottenere un tipo di dati varchar, dovresti farlo

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

che è già menzionato sopra

Se hai bisogno di un risultato nel formato di data e ora, dovresti passare attraverso una delle seguenti domande

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

2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112)) come 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


Se si utilizza SQL 2008 e versioni successive:

select cast(getdate() as date)

Semplicemente puoi fare in questo modo:

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

Uscite come:

2008-09-22 00:00:00.000

O semplicemente fai così:

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

Risultato:

Date Part Only
--------------
2013-07-14

Su SQL Server 2008 e versioni successive, è necessario CONVERT fino alla data:

SELECT CONVERT(date, getdate())

Nelle versioni precedenti, puoi eseguire le seguenti operazioni:

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

per esempio

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

mi da

2008-09-22 00:00:00.000

Professionisti:

  • Non sono richieste conversioni datetime <->
  • Non c'è bisogno di pensare alle locale

Usando FLOOR () - basta tagliare la parte del tempo.

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

perché non usi DATE_FORMAT (your_datetiem_column, '% d-% m-% Y')?

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

puoi cambiare la sequenza di m, d e anno riordinando la parte '%d-%m-%Y'


Per il ritorno in formato data

CAST (Data ordine AS data)

Il codice sopra funzionerà in sql server 2010

Ritornerà come 12/12/2013

Per SQL Server 2012 utilizzare il codice riportato di seguito

CONVERT(VARCHAR(10), OrderDate , 111)

 Convert(nvarchar(10), getdate(), 101) --->  5/12/14

 Convert(nvarchar(12), getdate(), 101) --->  5/12/2014

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

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))




datetime