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

Откуда:
Сообщений: 323
доброе утро!
Подскажите пожалуйста если кто знает.
имеется вот такой запрос
select EmailМодератора from dbo.МодераторМУП where НомерЦехаЗакрепМод like '%%'


он выбирает данные из вот такого типа
№  Фамилия    Имя       Отчество    НЦехаЗМод   EmailМодератора Телефон Учетная запись Датадобавления
1   Дегтярева Ольга	Николаевна 548, 554,   ondegtyareva@u.ru  21-15   U\ONDegtyareva	2015-03-16 11:37:00.000
2   Дегтярев   Антон	Николаевич 503, 474, 54	    andegtyarev@u.ru   21-15   AZURAL\ONDegtyareva	2015-03-16 11:37:00.000



Так вот проблема в следующем, как выбрать так чтобы при выборке

select EmailМодератора from dbo.МодераторМУП where НомерЦехаЗакрепМод like '%54%'


Выбралось именно 54, а 554 не выбиралось.
Т.е примерно условие такое если 2 символа то выбирать 54 если три символа то выбираться 554. Ну в общем как то так.
30 мар 15, 07:44    [17447990]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из запроса.  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
da haroch,

Надо нормализовать БД: связь сотрудника и цехов должна быть в отдельной таблице. Тогда подобного вопроса даже не возникнет.

Или извратиться через CROSS APPLY с такой функцией:
+
/* на вход должна подаваться строка с числами 
функция делит строку на числа, в соответствии с заданным разделителем,
и возвращает их в виде таблицы */
CREATE FUNCTION [dbo].[uf_SplitIntoTable](@String varchar(max), @Delimiter char(1))     
RETURNS @temptable TABLE (items int)     
AS     
BEGIN     
	DECLARE @idx int     
	DECLARE @slice varchar(max)     
    
	SELECT @idx = 1     
		IF len(@String)<1 or @String is null  RETURN     
    
	WHILE @idx!= 0     
	BEGIN
		SET @idx = CHARINDEX(@Delimiter,@String)     
		IF @idx!=0     
			SET @slice = left(@String,@idx - 1)     
		ELSE     
			SET @slice = @String     
		
		IF(LEN(@slice)>0)
			INSERT INTO @temptable(Items) VALUES(CAST(LTRIM(RTRIM(@slice)) as int))     

		SET @String = right(@String,len(@String) - @idx)     
		IF LEN(@String) = 0 BREAK     
	END 
RETURN     
END
30 мар 15, 07:52    [17448003]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из запроса.  [new]
Glory
Member

Откуда:
Сообщений: 104751
da haroch
Выбралось именно 54, а 554 не выбиралось.

select EmailМодератора from dbo.МодераторМУП where ', '+НомерЦехаЗакрепМод like '%, 54%'
30 мар 15, 08:26    [17448045]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из запроса.  [new]
top 1 with ties
Guest
da haroch
Выбралось именно 54, а 554 не выбиралось.
Т.е примерно условие такое если 2 символа то выбирать 54 если три символа то выбираться 554. Ну в общем как то так.

select top 1 with ties EmailМодератора from dbo.МодераторМУП where НомерЦехаЗакрепМод like '%54%'
order by length(НомерЦехаЗакрепМод)
30 мар 15, 08:27    [17448048]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из запроса.  [new]
op 1 with ties
Guest
top 1 with ties
da haroch
Выбралось именно 54, а 554 не выбиралось.
Т.е примерно условие такое если 2 символа то выбирать 54 если три символа то выбираться 554. Ну в общем как то так.

select top 1 with ties EmailМодератора from dbo.МодераторМУП where НомерЦехаЗакрепМод like '%54%'
order by length(НомерЦехаЗакрепМод)

аа, это "503, 474, 54" - одно значение в поле ...
тогда моё "отменяется" )
30 мар 15, 08:31    [17448051]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из запроса.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+

ext.Regex_IsMatch

+ ext.Regex_IsMatch

with t0(d) as
(
	select '78, 71, 554' union all
	select '25, 454, 71, 554' union all
	select '71, 554' union all
	select '71, 54'
)
select *
from
	t0
where
	/*
		Пара вариантов:

		ext.Regex_IsMatch(d, '(\D|\b)54(\D|\b)', null) = 1
		ext.Regex_IsMatch(d, '(?<=(\D|\b))54(?=(\D|\b))', null) = 1
	*/
	ext.Regex_IsMatch(d, '(\D|\b)54(\D|\b)', null) = 1

30 мар 15, 09:59    [17448302]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить