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

Откуда:
Сообщений: 85
Добрый день!

возник вопрос :
если надо выбрать записи , у кот-х значения в char-ом поле содержат фрагмент ':000:' , где количество 0 м.б. произвольное, т.е. все строки содержащие ':0:', ':00:' ,':000:' и т.д. нулей не больше 50 ...
как написать like ? и возможно ли это?

большое спасибо всем ответившим!
12 июл 11, 14:02    [10961465]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
LIKE '%0%'
12 июл 11, 14:05    [10961480]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Упс... Не обратил внимание на двоеточия.
12 июл 11, 14:06    [10961491]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
Crimean
Member

Откуда:
Сообщений: 13147
%0%?
12 июл 11, 14:06    [10961493]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
GeneralMotors
Member

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

нет, тогда попадут и ...:011234:.... - этого быть не должно....должны быть только 0 между двоеточиями...
12 июл 11, 14:06    [10961495]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
_ч_
Member

Откуда:
Сообщений: 1446
GeneralMotors,
в лоб:

declare @t table(n nvarchar(100))

insert into @t
select '0'
union
select '00'
union
select '000'
union
select '0123'


select * from @t
where n like '%0%' and n not like '%1%'
and n not like '%2%'
... ну и т.п. до 9

Символ ':' можно обрезать
12 июл 11, 14:14    [10961541]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Просто LIKEом это невозможно.
Недаром же в стандарте есть ещё и регулярные выражения
12 июл 11, 14:14    [10961542]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Может, что-то типа такого поможет?

declare @q varchar(100) = '1234:000:4321'
if @q like '%:0%' 
   and @q like '%0:%' 
   and replace(@q, '0', '') like '%::%' 
begin   
   select 1
end   
12 июл 11, 14:17    [10961573]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
GeneralMotors
Member

Откуда:
Сообщений: 85
Le Peace,

да, уже лучше ....
спасибО!!!!
12 июл 11, 14:19    [10961591]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
1
Guest
declare @q varchar(200)='yyyy:0000:cdwdcw'
select @q
where charindex(':00',@q)>0 or charindex('00:',@q)>0
12 июл 11, 18:53    [10963869]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
VAlexey
Member

Откуда:
Сообщений: 130
declare @t table(n nvarchar(100))

insert into @t
select ':0:'
union
select 'asd:00'
union
select ':000:'
union
select '0123:00:123'


select * 
from @t T1
	CROSS JOIN (SELECT 1 L UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 
		UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) T2
where  n LIKE '%:'+REPLICATE('0', T2.L)+ ':%'
13 июл 11, 09:04    [10965509]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
VAlexey
Member

Откуда:
Сообщений: 130
поправка

select * 
from @t T1
where EXISTS(
	SELECT 1 
	FROM (SELECT 1 L UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 
		UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) T2
	WHERE T1.n LIKE '%:'+REPLICATE('0', T2.L)+ ':%' 
	) 
13 июл 11, 09:06    [10965516]     Ответить | Цитировать Сообщить модератору
 Re: like, повторяющийся символ  [new]
CrazHunt
Guest
declare @r as table (r varchar(200))
INSERT INTO @r
SELECT ('342:010:232')
UNION
SELECT ('342:000000:232')
UNION
SELECT ('342:010000:232')
UNION
SELECT ('342:000000:232')
UNION
SELECT ('342:100:232')
UNION
SELECT ('342:0000005:232')
UNION
SELECT ('342:0000000000000000000:232')
select * from @r
SELECT CASE
when r LIKE '%:%[0]%:%' AND r NOT LIKE '%:%[1-9]%:%' THEN 'ok'
when r LIKE '%:%[1-9]%:%' THEN 'not ok'
END
,r
from @r



Вот так попробуй. Условия из кейса сам перетащить в where сможешь, я думаю.
13 июл 11, 10:35    [10965956]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить