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:
È 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))