Більш незалежним від мови варіантом рядкових літералів є міжнародний стандарт ISO 8601 формату "РРРР-ММ-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 "РРРР-MM-DD год. Год .: мм: сс" повинен бути "багатомовним". Однак, використовуючи той самий запит, формат ANSI працює не у всіх мовах SQL.
Наприклад, у датській мові у вас з’явиться багато помилок, таких як:
Помилка мови Датська Перетворення типу даних varchar у тип даних дату дату призвело до значення поза діапазоном.
Якщо ви хочете створити запит у C # для запуску на SQL Server, і вам потрібно передати дату у форматі ISO 8601, використовуйте специфікатор формату сортування "s" :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);