it-swarm.com.de

Wie erhalte ich ein Datum im Format JJJJ-MM-TT aus einem TSQL-Datum / Uhrzeit-Feld?

Wie rufe ich ein Datum von SQL Server im YYYY-MM-DD -Format ab? Ich brauche dies, um mit SQL Server 2000 und höher zu arbeiten. Gibt es eine einfache Möglichkeit, dies in SQL Server durchzuführen, oder wäre es einfacher, es programmgesteuert zu konvertieren, nachdem ich die Ergebnismenge abgerufen habe?

Ich habe CAST und CONVERT in Microsoft Technet gelesen, aber das gewünschte Format ist nicht aufgeführt, und das Ändern des Datumsformats ist keine Option.

247
Kinze
SELECT CONVERT(char(10), GetDate(),126)

Begrenzen Sie die Größe der varchar-Koteletts des Stundenanteils, den Sie nicht möchten.

397
Darrel Miller

Beginnend mit SQL Server 2012 (ursprüngliche Frage ist für 2000):

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')

97
Ignas Vyšnia
SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
96
Imran

Das Formular, nach dem Sie suchen, ist in der Onlinedokumentation der Bücher aufgeführt.

http://msdn.Microsoft.com/en-us/library/aa226054 (SQL.80) .aspx

Versuchen Sie beispielsweise Folgendes:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
35
John Sansom

Die Funktion convert mit dem Formatbezeichner 120 gibt Ihnen das Format "jjjj-MM-tt HH: mm: ss", sodass Sie nur die Länge auf 10 begrenzen müssen, um nur den Datumsteil zu erhalten:

convert(varchar(10), theDate, 120)

Das Formatieren von Daten ist jedoch im Allgemeinen in der Präsentationsschicht besser als in der Datenbank- oder Geschäftsschicht. Wenn Sie das aus der Datenbank formatierte Datum zurückgeben, muss der Client-Code es erneut auf ein Datum analysieren, wenn Berechnungen erforderlich sind.

Beispiel in C #:

theDate.ToString("yyyy-MM-dd")
26
Guffa

Für JJJJMMTT versuchen

select convert(varchar,getDate(),112)

Ich habe nur auf SQLServer2008 getestet.

14
LosManos

Ein anderer Weg ...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
6
Athadu

Für diejenigen, die auch den Teil der Zeit wollen würden (ich tat es), könnte das folgende Snippet helfen

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513
6
user2431693
replace(convert(varchar, getdate(), 111), '/','-')

Wird auch einen Trick machen, ohne "irgendetwas abzuhacken".

6
Rafael Emshoff

Falls jemand es andersherum machen will und dies findet.

select convert(datetime, '12.09.2014', 104)

Dadurch wird eine Zeichenfolge im deutschen Datumsformat in ein datetime-Objekt konvertiert.

Warum 104? Siehe hier: http://msdn.Microsoft.com/en-us/library/ms187928.aspx

6
Jenny O'Reilly

Verwenden Sie in Ihrem Cast- und Convert-Link den Stil 126 wie folgt:

CONVERT (varchar(10), DTvalue, 126)

Dies verkürzt die Zeit. Ihre Anforderung, es in JJJJ-MM-TT zu haben, bedeutet, dass es ein String-Datentyp und eine Datetime sein muss.

Ehrlich gesagt würde ich es auf dem Client tun, es sei denn, Sie haben gute Gründe, dies nicht zu tun.

5
gbn

Wenn Sie es später wieder als Datum anstelle von varchar verwenden möchten, vergessen Sie nicht, es zurück zu konvertieren:

select convert(datetime,CONVERT(char(10), GetDate(),126))
4
Wayne Evans

SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)

2
Dmitri Kouminov

In SQL Server 2008 können Sie dies tun: CONVERT(date,getdate())

1
Asher

Ich würde ... benutzen:

CONVERT(char(10),GETDATE(),126)
1
KM.
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))
1

Sie können auch verwenden. Dies geschieht unter Verwendung des neuen Datentyps DATE. Funktioniert möglicherweise nicht in allen früheren Versionen, ist jedoch in späteren Versionen erheblich vereinfacht.

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
1
Sams
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;
0
Raj Kumar

Die Verwendung einer CASE-Anweisung für jede der Konvertierungs-/Umwandlungsfunktionen funktioniert bei mir immer:

Bitte ersetzen Sie tableXXXXY durch Ihren Tabellennamen und issueDate_dat durch den Namen Ihres datetime-Feldes in dieser Tabelle:

SELECT  issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat))  AS issueDateYYYY
, CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS  issueDateMM
, CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD
FROM            tableXXXXY

Hoffe das war hilfreich. chagbert.

0
Chagbert

Diese Lösung funktioniert bei mir einfach und effektiv (auch bei 126)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
0
anfehernandez94

Wenn Ihr Quelldatum völlig durcheinander ist, versuchen Sie Folgendes:

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a
0
CArnold