ตัวเลือกที่ไม่ขึ้นกับภาษาสำหรับตัวอักษรสตริงคือรูปแบบISO 8601มาตรฐานสากล "YYYY-MM-DDThh: mm: ss" ฉันใช้แบบสอบถาม SQL ด้านล่างเพื่อทดสอบรูปแบบและมันใช้งานได้จริงในภาษา SQL ทั้งหมดในsys.syslanguages :
declare @sql nvarchar(4000)
declare @LangID smallint
declare @Alias sysname
declare @MaxLangID smallint
select @MaxLangID = max(langid) from sys.syslanguages
set @LangID = 0
while @LangID <= @MaxLangID
begin
select @Alias = alias
from sys.syslanguages
where langid = @LangID
if @Alias is not null
begin
begin try
set @sql = N'declare @TestLang table (langdate datetime)
set language ''' + @alias + N''';
insert into @TestLang (langdate)
values (''2012-06-18T10:34:09'')'
print 'Testing ' + @Alias
exec sp_executesql @sql
end try
begin catch
print 'Error in language ' + @Alias
print ERROR_MESSAGE()
end catch
end
select @LangID = min(langid)
from sys.syslanguages
where langid > @LangID
end
ตามส่วนรูปแบบวันที่และเวลาตามตัวอักษรใน Microsoft TechNet รูปแบบวันที่มาตรฐาน ANSI Standard SQL "YYYY-MM-DD hh: mm: ss" ควรเป็น "หลายภาษา" อย่างไรก็ตามการใช้แบบสอบถามเดียวกันรูปแบบ ANSI ไม่สามารถใช้ได้กับภาษา SQL ทั้งหมด
ตัวอย่างเช่นในภาษาเดนมาร์กคุณจะพบข้อผิดพลาดหลายประการดังต่อไปนี้:
ข้อผิดพลาดในภาษาเดนมาร์กการแปลงประเภทข้อมูล varchar เป็นประเภทข้อมูลวันที่และเวลาส่งผลให้ค่าอยู่นอกช่วง
ถ้าคุณต้องการสร้างแบบสอบถามใน C # เพื่อให้ทำงานบน SQL Server และคุณต้องส่งวันที่ในรูปแบบ ISO 8601 ให้ใช้ตัวระบุรูปแบบ "s" ที่เรียงได้ :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);