Als u datum/tijd moet specificeren met strings, moet u een veilige . gebruiken , taalonafhankelijk formaat.
In SQL Server is dat het ISO-8601-formaat (enigszins aangepast), en het ondersteunt in principe twee veilige formaten voor DATETIME
die altijd werken - ongeacht uw instellingen voor taal, regio en datumnotatie:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Opmerking:
-
de eerste notatie met alleen datum heeft geen streepjes of scheidingstekens!
-
het tweede formaat heeft streepjes voor de datum (kan ook worden weggelaten), en er is een vaste
T
als scheidingsteken tussen de datum en het tijdgedeelte van de tekenreeks
Bijwerken: volgens uw laatste opmerking (over de verschillende standaardtalen voor de twee gebruikers) - probeer dit:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Werkt prima...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Dit probeert de string te interpreteren als 11e van de 30e maand van 2012 en natuurlijk mislukt dat....