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

Откуда:
Сообщений: 103
Ребята добрый день, давно тут не был, но появилась задачка не знаю как решить

Суть проблемы есть поле, в ms sql server 2008, типа varchar содержит номера входящих документов, номера разного вида и цифры типа 1,2,3 и с буквами типа 123/н, 45-нвх, и длинные номера тип 123/543н/786/452 задача их отсортировать по возрастанию номеров, причём где есть знак / в счёт берём только число до знака /.
Я посмотрел есть код в запросах sql типа заменить подстроку в строке, это replace а в ней я ищу начальную позицию не цифры с помощью PATINDEX использую для поиска шаблон типа '%[^0-9]%' но такой вариант заменяет мне все знаки - в номере 123-нвх-проба и оставляет 123нвхпроба, прошу подсказать как аккуратно выпутаться из этой ситуации, спасибо большое!
4 июн 19, 23:33    [21902008]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помочь команда sql PATINDEX как правильно задать  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Номер вида "111-0/15" должен восприниматься как 111 или 1110?
5 июн 19, 04:13    [21902054]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помочь команда sql PATINDEX как правильно задать  [new]
aleks222
Member

Откуда:
Сообщений: 956
kirillo
Ребята добрый день, давно тут не был, но появилась задачка не знаю как решить

Суть проблемы есть поле, в ms sql server 2008, типа varchar содержит номера входящих документов, номера разного вида и цифры типа 1,2,3 и с буквами типа 123/н, 45-нвх, и длинные номера тип 123/543н/786/452 задача их отсортировать по возрастанию номеров, причём где есть знак / в счёт берём только число до знака /.
Я посмотрел есть код в запросах sql типа заменить подстроку в строке, это replace а в ней я ищу начальную позицию не цифры с помощью PATINDEX использую для поиска шаблон типа '%[^0-9]%' но такой вариант заменяет мне все знаки - в номере 123-нвх-проба и оставляет 123нвхпроба, прошу подсказать как аккуратно выпутаться из этой ситуации, спасибо большое!


1. STRING_SPLIT
2. REPLACE
3. for XML path('')

ЗЫ. п.3 лучше бы не делать. Нормализуй данные. И будет тебе щастье.
5 июн 19, 08:24    [21902077]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помочь команда sql PATINDEX как правильно задать  [new]
kirillo
Member

Откуда:
Сообщений: 103
111-0/15, должно быть 111, ребята кто знает дайте пожалуйста верный код для замены значения 1-проба-вх. На 1. Команды replace
5 июн 19, 10:04    [21902185]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помочь команда sql PATINDEX как правильно задать  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
declare @t table (docnum varchar(100));
insert into @t
values
 ('1'), ('123/н'), ('45-нвх'), ('123/543н/786/452'), ('A10');

select
 a.docnum, cast(c.s2 as bigint)
from
 @t a cross apply
 (select substring(a.docnum, isnull(nullif(patindex('%[0-9]%', a.docnum), 0), 1), 2147483647)) b(s1) cross apply
 (select left(b.s1, isnull(nullif(patindex('%[^0-9]%', b.s1), 0) - 1, 2147483647))) c(s2);
5 июн 19, 10:25    [21902212]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помочь команда sql PATINDEX как правильно задать  [new]
kirillo
Member

Откуда:
Сообщений: 103
invm, большое спасибо, код действительно делает то что мне нужно, огромная польза вот моя строка которую я использую
UPDATE main_other SET Vr = REPLACE ( main_other.Vhod_number, SUBSTRING( main_other.Vhod_number,PATINDEX('%[^0-9]%',main_other.Vhod_number), 1),'');
Прошу вас подправьте мой код, сейчас получается так в файле

К сообщению приложен файл. Размер - 39Kb
5 июн 19, 12:55    [21902430]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить