Esistono molti formati supportati da SQL Server: consultare la documentazione online di MSDN su CAST e CONVERT . La maggior parte di questi formati dipende dalle impostazioni che hai - quindi, queste impostazioni potrebbero funzionare alcune volte - e talvolta no.
Il modo per risolverlo è utilizzare il formato data ISO-8601 (leggermente adattato) supportato da SQL Server - questo formato funziona sempre - indipendentemente dalla lingua e dalle impostazioni del formato data di SQL Server.
Il formato ISO-8601 è supportato da SQL Server disponibile in due versioni:
YYYYMMDD
solo per le date (nessuna porzione di tempo); nota qui: nessun trattino! , è molto importante! NONYYYY-MM-DD
è indipendente dalle impostazioni del formato della data nel tuo SQL Server e NON funzionerà in tutte le situazioni!
o:
YYYY-MM-DDTHH:MM:SS
per date e ore - nota qui: questo formato ha trattini (ma possono essere omessi) e un fisso T
come delimitatore tra la data e l'ora della tua DATETIME
.
Questo è valido per SQL Server 2000 e versioni successive.
Quindi, nel tuo caso concreto, usa queste stringhe:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
e dovresti andare bene (nota: per questo devi usare il formato internazionale 24 ore anziché il formato 12 ore AM / PM).
In alternativa : se utilizzi SQL Server 2008 o versioni successive, puoi anche utilizzare il DATETIME2
tipo di dati (anziché semplice DATETIME
) e il tuo attuale INSERT
funzionerebbe senza problemi! :-) DATETIME2
è molto meglio e molto meno esigente nelle conversioni - ed è comunque consigliato i tipi di dati data / ora per SQL Server 2008 o successivi.
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
Non chiedermi perché l'intero argomento sia così complicato e un po 'confuso: è così. Ma con il YYYYMMDD
formato, dovresti andare bene per qualsiasi versione di SQL Server e per qualsiasi impostazione di lingua e formato data nel tuo SQL Server.