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

Откуда:
Сообщений: 33
Помогите написать запрос с применением PATINDEX.
Задача:
Есть таблица Т
CREATE TABLE T (
stz VARCHAR (10);

INSERT INTO T (stz)
VALUES ('267/17-18'), ('341/1-9/8'), ('3/141-0'), (3/15);

Написать запрос, в результате которого будет
17
1
141
15
то есть то, что после знака / и до первого символа.
18 окт 17, 16:17    [20879616]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dies irae
Member

Откуда:
Сообщений: 78
cglcz
и до первого символа.


до какого первого символа?
если до первой не цифры:
declare @T TABLE (
stz VARCHAR (10)
);

INSERT INTO @T (stz)
VALUES ('267/17-18'), ('341/1-9/8'), ('3/141-0'), ('3/15');

select left(s, isnull(nullif(patindex('%[^0-9]%',s),0)-1, 4000))
from (
	select substring(stz, charindex('/', stz)+1, 4000 ) as s
	from @t
	) as t
18 окт 17, 16:38    [20879693]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
cglcz
Member

Откуда:
Сообщений: 33
dies irae,

до первой не цифры и не буквы. Там до символа '-' получается
18 окт 17, 16:43    [20879705]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Владислав Колосов
Member

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

ять на сервере надо хранить атомарные данные, а не заливать всякое гуано, а потом парсить!
18 окт 17, 16:53    [20879734]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dies irae
Member

Откуда:
Сообщений: 78
Владислав Колосов
ять на сервере надо хранить атомарные данные, а не заливать всякое гуано, а потом парсить!

ять ну вот откуда ты взял, что это не часть ETL к примеру?

до первой не цифры и не буквы маска будет такая '%[^0-9a-zA-Z]%'
18 окт 17, 17:10    [20879793]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
cglcz
Member

Откуда:
Сообщений: 33
dies irae,

c CHARINDEX решение такое:

select substring (stz, charindex ('/', stz)+1,
case
when charindex ('-',stz) >0
then charindex ('-', stz) - charindex ('/', stz)-1
else len (stz)
end)
from T;


как его переделать на PATINDEX?
18 окт 17, 17:31    [20879883]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dies irae
Member

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

я написал решение.
сначала для любого символа, кроме цифры в качестве второго разделителя.
потом привёл маску для не цифры и не буквы.
замените её в вызове patindex
18 окт 17, 17:39    [20879908]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить