Jika Anda perlu menentukan tanggal waktu menggunakan string, Anda harus menggunakan aman , format yang tidak bergantung pada bahasa.
Di SQL Server, itulah format ISO-8601 (sedikit disesuaikan), dan pada dasarnya mendukung dua format aman untuk DATETIME
yang selalu berfungsi - terlepas dari pengaturan bahasa, regional, dan format tanggal Anda:
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)
Catatan:
-
format pertama hanya tanggal tanpa tanda hubung atau pembatas!
-
format kedua memiliki tanda hubung untuk tanggal (dapat dihilangkan juga), dan ada
T
tetap sebagai pembatas antara tanggal dan bagian waktu dari string
Pembaruan: sesuai komentar terakhir Anda (pada bahasa default yang berbeda untuk dua pengguna) - coba ini:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Bekerja dengan baik...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Ini mencoba menafsirkan string sebagai tanggal 11 bulan 30 tahun 2012 dan jelas, itu gagal....