Một lựa chọn độc lập với ngôn ngữ hơn cho chuỗi ký tự chuỗi là định dạng ISO 8601 tiêu chuẩn quốc tế "YYYY-MM-DDThh: mm: ss". Tôi đã sử dụng truy vấn SQL bên dưới để kiểm tra định dạng và nó thực sự hoạt động trong tất cả các ngôn ngữ SQL trong sys.syslacular :
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
Theo phần Định dạng chuỗi ngày và định dạng chuỗi trong Microsoft TechNet, định dạng ngày SQL tiêu chuẩn ANSI "YYYY-MM-DD hh: mm: ss" được coi là "đa ngôn ngữ". Tuy nhiên, sử dụng cùng một truy vấn, định dạng ANSI không hoạt động trong tất cả các ngôn ngữ SQL.
Ví dụ: trong tiếng Đan Mạch, bạn sẽ gặp nhiều lỗi như sau:
Lỗi trong ngôn ngữ Tiếng Đan Mạch Việc chuyển đổi một kiểu dữ liệu varchar thành kiểu dữ liệu datetime dẫn đến một giá trị ngoài phạm vi.
Nếu bạn muốn xây dựng một truy vấn trong C # để chạy trên SQL Server và bạn cần vượt qua một ngày ở định dạng ISO 8601, hãy sử dụng công cụ xác định định dạng "s" Sắp xếp :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);