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

Откуда:
Сообщений: 953
таблица table1. Поле N vachar.

Есть такие записи в таблице

U:\Общая\OTDEL_12\er.txt
U:\Общая\OTDEL_1\qererer.txt
U:\Общая\OTDEL_8\eerererr.txt
U:\Общая\OTDEL_82334343434343\eerererr.txt
U:\Общая\для всех\
...

Мне нужно отобрать те которые с "U:\Общая\OTDEL_" + {любое количество циферок}. Как это сделать?


select N from table1 where N like
'U:\Общая\OTDEL_\[0-9]:N%'
???
3 май 12, 12:03    [12499995]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мордор Держимордов
{любое количество циферок}

Like - это не регулярные выражения.
3 май 12, 12:06    [12500023]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 953
Ну так можно как то указать что вот здесь может быть от нуля до трёх символов из этого ([0-9]) множества?
3 май 12, 12:17    [12500120]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мордор Держимордов
Ну так можно как то указать что вот здесь может быть от нуля до трёх символов из этого ([0-9]) множества?

Перечислить все комбинации
А что такое "от нуля символов" ?

Сообщение было отредактировано: 3 май 12, 12:18
3 май 12, 12:18    [12500127]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 953
Можно ли как то указать что вот здесь может быть от ОДНОГО до трёх символов из этого ([0-9]) множества?
3 май 12, 12:18    [12500130]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 953
Glory
Мордор Держимордов
Ну так можно как то указать что вот здесь может быть от нуля до трёх символов из этого ([0-9]) множества?

Перечислить все комбинации



А если там много циферок?

Ну то есть как то просто никак?
3 май 12, 12:19    [12500140]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мордор Держимордов
А если там много циферок?

А если бы он вез патроны ?

Мордор Держимордов
Ну то есть как то просто никак?

Если вы про LIKE, то никак.
Нет там регулярных выражений.
3 май 12, 12:20    [12500157]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Можно так, но жутко медленно будет:
like 'U:\Общая\OTDEL_[0-9]\%'
or like 'U:\Общая\OTDEL_[0-9][0-9]\%'
or like 'U:\Общая\OTDEL_[0-9][0-9][0-9]\%'
or ... --пока не надоест
3 май 12, 12:28    [12500242]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
like 'U:\Общая\OTDEL_%[0-9]%'


Только если в имени файла есть циферки то тоже зацепит...
3 май 12, 12:28    [12500249]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Если структура каталогов имеет фиксированный уровень вложенности, то сработает так
like 'U:\Общая\OTDEL_%' and
      not like 'U:\Общая\OTDEL_%[^0123456789]%\%'
3 май 12, 12:48    [12500480]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
студентос
Guest
Можно попробовать и так =)
:
SELECT N
FROM table1
WHERE trim(left(N,15)) ='U:\Общая\OTDEL_'
3 май 12, 13:20    [12500825]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
студентос
Можно попробовать и так =)
:
SELECT N
FROM table1
WHERE trim(left(N,15)) ='U:\Общая\OTDEL_'


не очень способ из-за невозможности использовать индекс на N
3 май 12, 13:32    [12500950]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Мистер Хенки, по trim-у видно что тролинг.
3 май 12, 16:05    [12502385]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
stassk8
Member

Откуда:
Сообщений: 55
declare @t table ( a varchar(50))
insert into @t values('U:\Общая\OTDEL_12\er.txt');
insert into @t values('U:\Общая\OTDEL_1\qererer.txt');
insert into @t values('U:\Общая\OTDEL_8\eerererr.txt');
insert into @t values('U:\Общая\OTDEL_82334343434343\eerererr.txt');
insert into @t values('U:\Общая\для всех\');
insert into @t values('U:\Общая\для всех3\');
insert into @t values('U:\Общая\OTDEL_444\44erererr.txt');
insert into @t values('U:\Общая\OTDEL_4444\44erererr.txt');

select * from @t
where substring(a,charindex ('_', a) + 1,4) like '_%\%'
and a like 'U:\Общая\OTDEL_%'

...
charindex ('_', a) + 1,4
если поменять 4 на 5, то проверка на 4 цифры после отдела, способ дурацкий, но работает, при такой структуре и много условия писать не нужно.
3 май 12, 16:24    [12502605]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
вот есть такой вариант :)

DECLARE @pfx varchar(100) = 'U:\Общая\OTDEL^_'

SELECT * 
FROM @t
WHERE a LIKE @pfx + REPLICATE('[0-9]', 1 + LEN(a) - LEN(@pfx) - CHARINDEX('\', REVERSE(a))) + '\%' ESCAPE '^'
3 май 12, 16:44    [12502802]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
declare @t table (fname varchar(255));

insert into @t
values
 ('U:\Общая\OTDEL_12\er.txt'),
 ('U:\Общая\OTDEL_1\qererer.txt'),
 ('U:\Общая\OTDEL_8\eerererr.txt'),
 ('U:\Общая\OTDEL_82334343434343\eerererr.txt'),
 ('U:\Общая\для всех\');

with t as
(
 select
  fname,
  nullif(patindex('%OTDEL[_][0-9]%', fname), 0) + 6 as p
 from
  @t
)
select
 fname
from
 t
where
 patindex('%[^0-9]%', right(fname, len(fname) - p + 1)) > 1;
3 май 12, 16:52    [12502893]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
stassk8
Member

Откуда:
Сообщений: 55
invm, а U:\Общая\OTDEL_82334343434343\eerererr.txt зачем попало в выборку?
3 май 12, 16:58    [12502957]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
потому что попросили
Guest
stassk8,
>>>Мне нужно отобрать те которые с "U:\Общая\OTDEL_" + {любое количество циферок}
3 май 12, 17:18    [12503122]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
stassk8
Member

Откуда:
Сообщений: 55
потому что попросили, а, показалось, что позже речь зашла о - "Можно ли как то указать что вот здесь может быть от ОДНОГО до трёх символов из этого ([0-9]) множества? ", но не суть...
3 май 12, 17:28    [12503203]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
stassk8, а в вашем примере отбираются не только цифры
3 май 12, 17:37    [12503283]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
вот допиленный вариант отбирает случаи с 1..3 цифрами в имени папки

DECLARE @pfx varchar(100) = 'U:\Общая\OTDEL^_'

SELECT a, extra
FROM (
	SELECT a, 1 + LEN(a) - LEN(@pfx) - CHARINDEX('\', REVERSE(a)) extra
	FROM @t
) z
WHERE z.a LIKE @pfx + REPLICATE('[0-9]', z.extra) + '\%' ESCAPE '^'
	AND extra BETWEEN 1 AND 3
3 май 12, 17:48    [12503338]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать в like с несколькими символами  [new]
потому что попросили
Guest
stassk8,

и правда что. у автора 7 пятниц на неделе.
вот так и выходит: просят сперва одно, потом другое.
кто-то только первую хотелку прочел, а кто-то вторую
3 май 12, 17:51    [12503358]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить