Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить латиницу из строки  [new]
gnikspam
Member

Откуда:
Сообщений: 39
Ребята, каким образом средствами t-sql получить только латиницу из строки, ну например

'Телефон Brand sku'

Спасибо.
21 авг 16, 13:19    [19569638]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
aleks2
Guest
declare @str nvarchar(129) = N'Телефон Brand sku';

declare @t table(ch nchar(1));

insert @t values(N'а'), (N'б'), (N'в'), (N'т'), (N'е'), (N'л'), (N'ф'), (N'о'), (N'н'); 

select @str = REPLACE(@str, ch, '') from @t;

select @str;


-- можно от противного
declare @str nvarchar(129) = N'Телефон Brand sku';

declare @lat nvarchar(24) = N' abcdefgh...';
declare @n table(n int primary key);

insert @n values(1), (2), (3), (4), (5), (6), (7), (8), (9); -- ...

select @str = case when CHARINDEX( SUBSTRING(@str, n, 1), @lat ) > 0 then @str else STUFF(@str, n, 1, '') end from @n where n <= LEN(@str) order by n desc;

select @str;
21 авг 16, 15:27    [19569833]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
gnikspam
Member

Откуда:
Сообщений: 39
aleks2,

Спасибо. Очень изящное решение!
21 авг 16, 15:47    [19569863]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
gnikspam
Member

Откуда:
Сообщений: 39
gnikspam
aleks2,

Спасибо. Очень изящное решение!


Только вот 'Смартфон DEXP Ixion ES135 Hit White 6901' по первому варианту вернуло

'Смр DEXP Ixion ES135 Hit White 6901'
21 авг 16, 15:49    [19569866]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
aleks2
Guest
gnikspam
gnikspam
aleks2,

Спасибо. Очень изящное решение!


Только вот 'Смартфон DEXP Ixion ES135 Hit White 6901' по первому варианту вернуло

'Смр DEXP Ixion ES135 Hit White 6901'

Купи букварь - выучи русский алфавит.
21 авг 16, 16:04    [19569900]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @str nvarchar(129) =  N'Смартфон DEXP Ixion ES135 Hit White 6901';
declare @l int = 1
declare @s nvarchar(1)
declare @fin nvarchar(129) = '' 


while @l <= len(@str) begin

set @s = SUBSTRING(@str,@l,1)

if ascii(lower(@s)) > 223 set @s = ''
set @fin += @s

set @l +=1

end

select @fin
21 авг 16, 18:13    [19570273]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
declare @mix nvarchar(max)=N'Смартфон DEXP Ixion ES135 Hit White 6901';
with l0 as(
  select 1 c union all select 1
),l1 as(
  select a.c from l0 a,l0 b
),l2 as(
  select a.c from l1 a,l1 b
),l3 as(
  select a.c from l2 a,l2 b
),l4 as(
  select a.c from l3 a,l3 b
),nm as(
  select row_number()over(order by(select null)) n
  from l4 a,l4 b
  order by n
    offset 0 rows
    fetch first len(@mix) rows only
),up as(
  select substring(@mix,n,1) c
  from nm
)
select (select c+''
        from up
        where lower(c) between N'a' and N'z'
        for xml path('')) ln;
21 авг 16, 23:15    [19570936]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
gnikspam
Member

Откуда:
Сообщений: 39
aleks2
gnikspam
пропущено...


Только вот 'Смартфон DEXP Ixion ES135 Hit White 6901' по первому варианту вернуло

'Смр DEXP Ixion ES135 Hit White 6901'

Купи букварь - выучи русский алфавит.


зачем?
22 авг 16, 01:07    [19571109]     Ответить | Цитировать Сообщить модератору
 Re: Получить латиницу из строки  [new]
iljy
Member

Откуда:
Сообщений: 8711
gnikspam,

затем, что на самом деле в нем 33 буквы.
22 авг 16, 07:58    [19571219]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить