Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a specificare la data letterale quando scrivo una query SQL da SQL Server collegata a Oracle?

Preferisco il formato ODBC:

--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

La data letterale semplice non è indipendente dalla cultura...

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

Ma funziona, comunque, con il tipo di destinazione DATE (questa differenza è piuttosto strana...):

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

Grazie a lad2025 voglio aggiungere per completezza la "completa" ISO 8601, che funziona bene:

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