Zobacz sekcję String Literal Date and Time Formats w witrynie Microsoft TechNet.
Można użyć standardowego formatu daty standardowej ANSI ANSI. Zgodnie z powyższym linkiem jest oznaczony jako "wielojęzyczny":
insert into table1(approvaldate) values ('2012-06-18 10:34:09')
Nie będzie to jednak działać we wszystkich językach. Na przykład o to szybkie skrypt, który wykorzystuje dynamiczny SQL, aby sprawdzić format daty we wszystkich językach SQL określonych w 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-18 10: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
Po uruchomieniu tego skryptu, to będzie wiele błędów, jak następuje:
Błąd w języku duńskim Konwersja typu danych varchar na typ danych datetime spowodowała przekroczenie zakresu wartości.
Innym językowo niezależnym wyborem literałów ciągów jest międzynarodowy standard formatu ISO 8601. Format ten jest bardzo podobny do standardu ANSI wyjątkiem „T” dosłownym pomiędzy datą i godziną:
insert into @TestLang (langdate) values ('2012-06-18T10:34:09')
testowałem to i to rzeczywiście działa we wszystkich językach SQL.
Dziękuję .. To działa. Przy okazji nie można wprowadzić formatu DD-MM-RR? – Shee
@RichardTheKiwi co oznacza '5'? – Shee
@See zobaczył dodaną stopkę, aby odpowiedzieć na – RichardTheKiwi