Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie gebe ich das Datumsliteral an, wenn ich eine SQL-Abfrage von SQL Server schreibe, die mit Oracle verknüpft ist?

Ich bevorzuge das ODBC-Format:

--DateTime
SELECT {ts'2015-09-20 12:30:00'}
--Time (however this comes with "today"-time)
SELECT {t'12:30:00'}
--Date
SELECT {d'2015-09-20'}
GO

Das einfache Datumsliteral ist nicht kulturunabhängig...

SET LANGUAGE ENGLISH;
SELECT CAST('2014-09-13' AS DATETIME);
GO
SET LANGUAGE GERMAN;
SELECT CAST('2014-09-13' AS DATETIME);--ERROR: there's no month "13"
GO

Aber es funktioniert - wie auch immer - mit dem Zieltyp DATE (Dieser Unterschied ist ziemlich seltsam...):

SET LANGUAGE ENGLISH;
SELECT CAST('2014-09-13' AS DATE);
GO
SET LANGUAGE GERMAN;
SELECT CAST('2014-09-13' AS DATE);--ERROR: there's no month "13"
GO

Danke an lad2025. Ich möchte der Vollständigkeit halber die "vollständige" ISO 8601 hinzufügen, die gut funktioniert:

SET LANGUAGE ENGLISH;
SELECT CAST('2014-09-13T12:30:00' AS DATETIME);
GO
SET LANGUAGE GERMAN;
SELECT CAST('2014-09-13T12:30:00' AS DATETIME);
GO