Поддерживаемые коды языков ISO в SQL-сервере
• Как я могу указать поддерживаемые региональные коды ISO для каждой версии, над которой я работаю?
Мне нужно проверить код языка ISO 639-1 (2 символа), чтобы узнать, поддерживается ли он. Вы не получаете ответа по умолчанию для версий до 2019 года. Это вызывает ошибку.
Пример требования:
select format(current_timestamp,'dd-MMMM-yyyy','es')
select format(current_timestamp,'dd-MMMM-yyyy','mn')
select format(current_timestamp,'dd-MMMM-yyyy','ii')
select format(current_timestamp,'dd-MMMM-yyyy','oo')
select format(current_timestamp,'dd-MMMM-yyyy','qq')
Вышеупомянутое вернет 2 ошибки на (my) v.2016 - параметр культуры 'oo', указанный в вызове функции, не поддерживается. Параметр языка и региональных параметров «qq», указанный в вызове функции, не поддерживается.
Это не соответствует определениям, перечисленным в sys.syslanguages. И эта таблица также не включает код iso.
Спасибо!
1 ответ
Согласно ответу Мартина, это отличается от одной среды к другой. Уродливый способ сработает, но было бы неплохо работать со списком из внутренних таблиц.
drop table if exists #SupportedLanguages;
create table #SupportedLanguages(Lang varchar(2));
declare c cursor fast_forward local for
select concat(a.value,b.value)
from string_split('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z',',')a
cross apply string_split('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z',',')b
open c;
declare @c varchar(2), @cmd varchar(100);
fetch next from c into @c;
while @@FETCH_STATUS = 0
begin
select @cmd = concat('select format(current_timestamp,''dd-MMMM-yyyy'',''', @c, ''')')
begin try
exec(@cmd);
insert into #SupportedLanguages values(@c);
end try
begin catch
end catch
fetch next from c into @c;
end;
close c;
deallocate c;