2016-07-29 9 views
1

Ich versuche, einen Hauptkalender in SQL Server zu erstellen. Ich bin vor, das Problem mit dieser Syntax:Wie verkette ich Datepart in SQL Server?

[dateid] as DATEPART(YEAR, [date]) & DATEPART(day, format([date],'DD')) & DATEPART(month, format([date], 'MM')) 

[dateid] as convert(varchar(4), DATEPART(YEAR, [date])) + convert(varchar(2), DATEPART(day, format([date], 'DD'))) + convert(varchar(2), DATEPART(month, format([date], 'MM'))) 

[dateid] as cast(DATEPART(YEAR, [date]) as varchar(4)) + cast(DATEPART(day, format([date], 'DD')) as varchar(2)) + cast(DATEPART(month, format([date], 'MM')) as varchar(2)) 

Diese Aussagen sind unter create table tablename (...).

Ich habe oben Syntax versucht, und es zeigt:

Fehler bei der Konvertierung, wenn Datum und/oder Uhrzeit aus Zeichenkette

oder

Die Datentypen varchar Umwandlung und Varchar sind in dem '&'-Operator inkompatibel.

Kann mir jemand helfen, mit dieser, ich möchte wie Datum zeigen (YearDayMonth) - 20160111 - wie diese drei verketten?

+0

Wenn Sie 'CONCAT' oder '+' verketten möchten. Außerdem sieht es so aus, als würden Sie versuchen, Datumsangaben als Strings zu speichern, verwenden Sie besser "datetime", "datetime" hat kein inhärentes Format. – HoneyBadger

+0

Ich habe versucht [deideid] \t \t als concat (DATEPART (Jahr, [Datum]), DATEPART (Tag, Format ([Datum], 'DD')), DATEPART (Monat, Format ([Datum], 'MM'))) aber es zeigt Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus Zeichenkette. – Mogli

+0

Sie könnten 'try_convert' versuchen, es konvertiert die Werte, die es konvertieren kann, und gibt' null' zurück, wenn dies nicht möglich ist. Alternativ können Sie in Ihrem 'convert' einen Konvertierungsstil angeben. Dies hängt alles von Ihren Daten ab, da es Werte gibt, die nicht konvertiert werden können. – HoneyBadger

Antwort

0

Warum kann man nur

verwenden
SELECT FORMAT(SYSDATETIME(), 'yyyyddMM') 

oder in Ihrem CREATE TABLE Aussage:

CREATE TABLE dbo.YourTable 
(
    ..... 
    SomeDate DATE, 
    DateId AS FORMAT(SomeDate, 'yyyyddMM'), 
    ...... 
) 
+0

wie dumm ich bin :) Vielen Dank. – Mogli

+1

@Mogli: passiert mit jedem - früher oder später - wenn du einfach zu tief in etwas hineingehst. Das ist, wo zusätzliche Augenpaare z.B. StackOverflow ist hilfreich! :-) Froh, mir behilflich zu sein –