Dize değişmezleri için dilden daha bağımsız bir seçenek, uluslararası standart ISO 8601 biçimi "YYYY-AA-GGTss: dd: ss" dir. Formatı test etmek için aşağıdaki SQL sorgusunu kullandım ve gerçekten de sys.sys dillerinde tüm SQL dillerinde çalışıyor :
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
Göre Dize Birebir Tarih ve Saat Biçimleri Microsoft TechNet, standart ANSI Standardı SQL tarih biçimi ": dd: YYYY-AA-GG ss ss" bölümünün "çok-dilli" olması gerekiyordu. Ancak, aynı sorguyu kullanarak ANSI biçimi tüm SQL dillerinde çalışmaz.
Örneğin, Danca'da aşağıdaki gibi birçok hata yapacaksınız:
Danca dilinde hata Varchar veri türünün tarih saat veri türüne dönüştürülmesi, aralık dışı bir değerle sonuçlandı.
SQL Server'da çalıştırmak için C #'da bir sorgu oluşturmak istiyorsanız ve ISO 8601 biçiminde bir tarih iletmeniz gerekiyorsa , Sıralanabilir "s" biçim belirticisini kullanın :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);