si utilizzano formati diversi per la stringa, quindi è possibile evitare questo comportamento.
Ci sono 2 formati ISO sempre specifici: il server SQL li analizzerà sempre nello stesso modo indipendentemente dall'impostazione del formato della data del server.
Questi sono:
1) forma breve: AAAAMMGG.Esempio '20120301' - 1 marzo 2012
2) Forma lunga: AAAA-MM-GGTHH: MM: SS.msms '. Esempio '2012-03-01T12: 13: 00.000Z' - 1 marzo 2012 alle 13 (12)
Nel formato lungo i millisecondi sono facoltativi - questo è un ISO datetime perfettamente accettabile '2012- 03-01T12: 13: 00Z '
La Z alla fine è informazioni sul fuso orario. SQL Server in realtà non richiede questo. (Anche se altri prodotti sono un po 'più impegnativo)
Prova questo per esempio:
DECLARE @foo DATETIME
SET DATEFORMAT DMY
-- this will be the 3rd of january in DMY
SET @foo = '2012-03-01'
SELECT 'DMY: Not ISO', @foo
SET @foo = '20120301'
SELECT 'DMY: ISO', @foo
SET DATEFORMAT MDY
-- this will be the 1st of March in MDY
SET @foo = '2012-03-01'
SELECT 'MDY: not ISO', @foo
SET @foo = '20120301'
SELECT 'MDY: ISO', @foo
Quando si utilizza il testo inserire date si dovrebbe sempre tenta di utilizzare una delle due norme ISO. Semplicemente rende le cose molto più deterministiche.
formato breve (SQL Server) http://msdn.microsoft.com/en-US/library/ms187085(v=sql.90).aspx
ISO 8601 Format (SQL Server) http://msdn.microsoft.com/en-us/library/ms190977(v=sql.90).aspx
fonte
2013-07-09 12:16:25
La risposta è lì http://stackoverflow.com/questions/17491459/how-can-i- get-sql-server-to-use-user-locale-per-data-formato-per-una-query –