स्ट्रिंग शाब्दिकों के लिए एक अधिक भाषा-स्वतंत्र विकल्प अंतर्राष्ट्रीय मानक आईएसओ 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 मानक SQL दिनांक स्वरूप "YYYY-MM-DD hh: mm: ss" को "बहु-भाषा" माना जाता है। हालाँकि, एक ही क्वेरी का उपयोग करते हुए, ANSI प्रारूप सभी SQL भाषाओं में काम नहीं करता है।
उदाहरण के लिए, डेनिश में, आपको निम्नलिखित की तरह कई त्रुटियां होंगी:
भाषा में त्रुटि डेनिश एक varchar डेटा प्रकार के डेटाटाइम डेटा प्रकार में परिवर्तित होने के परिणामस्वरूप एक आउट-ऑफ-रेंज मान होता है।
यदि आप SQL सर्वर पर चलने के लिए C # में एक क्वेरी बनाना चाहते हैं, और आपको ISO 8601 प्रारूप में एक दिनांक पास करने की आवश्यकता है, तो Sortable "s" प्रारूप विनिर्देशक का उपयोग करें :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);