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

Откуда: UK
Сообщений: 523
В ячейке таблицы хранятся зачения времен через запятую в формате hhmm. Например - '1100, 1700, 2300'.

Это список времен, в которые нужно выполнять определенные действия. Как сделать для одного значения я разобрался, подскажите как сделать проверку для целой строчки. (Если текущее время лежит в каком-нибудь из промежутков 1100-1200, 1700-1800, 23-00-00-00, то выполняются действия).
23 июл 12, 17:48    [12904480]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Спросите у архитектора, который придумал так хранить временные интервалы.
23 июл 12, 17:50    [12904498]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Гавриленко Сергей Алексеевич,

Формат хранения данных можно изменить. В данный момент для меня вопрос стоит в том, чтобы проверить выполнение хотябы одного из нескольких условий в строке.
23 июл 12, 17:57    [12904536]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Гавриленко Сергей Алексеевич,

в таком странном формате наверное только like поможет.
23 июл 12, 18:53    [12904813]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
Remind
Member

Откуда: UK
Сообщений: 523
WarAnt,

Не привязывайтесь к формату ;)
23 июл 12, 21:00    [12905325]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Remind,

Как можно не привязываться к формату, если у вас проблема именно в формате?
23 июл 12, 21:02    [12905331]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Remind
Формат хранения данных можно изменить.
Ну вот и нормализуйте данные. Тогда ваша задача будет решаться элементарно.
23 июл 12, 21:28    [12905407]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
Remind
Member

Откуда: UK
Сообщений: 523
invm,

Все-таки хотелось бы увидеть реальные советы с любым форматом хранения времени (одно условие, они должны быть в одной строке).
24 июл 12, 00:00    [12905797]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Remind
invm,

Все-таки хотелось бы увидеть реальные советы с любым форматом хранения времени (одно условие, они должны быть в одной строке).
Строковыми функциями разбирать строку, делать из неё таблицу и дальше уже проверять условие.
24 июл 12, 00:06    [12905814]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Remind
invm,

Все-таки хотелось бы увидеть реальные советы с любым форматом хранения времени (одно условие, они должны быть в одной строке).
Реальный совет был - нормализовать данные, чтобы они _не_ хранились в одной строке. Остальное - извращение, за которое автору сего должно икаться, пока оно не будет переделано.

З.Ы. https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml
24 июл 12, 00:07    [12905815]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
alexeyvg
Remind
invm,

Все-таки хотелось бы увидеть реальные советы с любым форматом хранения времени (одно условие, они должны быть в одной строке).
Строковыми функциями разбирать строку, делать из неё таблицу и дальше уже проверять условие.
Ещё можно хранить в строке XML, тогда проверять и разбирать будет проще. Хотя по любому, будет медленнее (на несколько порядков) и объёмнее, чем хранить как обычно.
24 июл 12, 00:08    [12905820]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Remind,

Можете хранить интервалы в нормализованном виде и триггером поддерживать представление в виде одной строки в родительской таблице. Или наоборот.
24 июл 12, 00:18    [12905840]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
kalakhary
Member

Откуда:
Сообщений: 17
может быть как-то вот так?
create table #a (code varchar(200))
insert into #a values ('0915, 1100, 1700, 2300')
create table #b (id int identity, code varchar(200))

insert into #b
SELECT ltrim(SUBSTRING(',' + a.code + ',', n.Number + 1, CHARINDEX(',', ',' + a.code + ',', n.Number + 1) - n.Number - 1)) AS [Value]
FROM #a AS a
INNER JOIN master..spt_values AS n ON n.Type = 'p'
WHERE n.Number > 0
AND SUBSTRING(',' + a.code + ',', n.Number, 1) = ','
AND n.Number < LEN(',' + a.code + ',')

select *, replace(convert(varchar(5), getdate(), 8), ':', ''),
case when replace(convert(varchar(5), getdate(), 8), ':', '') between b1.code and b2.code then 1 else 0 end
from #b b1, #b b2
where b1.id = b2.id-1

drop table #a
drop table #b
24 июл 12, 02:40    [12905996]     Ответить | Цитировать Сообщить модератору
 Re: Разбор строки и проверка условия  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Я вообще не понимаю вот этого:
Remind
Например - '1100, 1700, 2300'.
Remind
время лежит в каком-нибудь из промежутков 1100-1200, 1700-1800, 23-00-00-00
Где в "например" 1200, 1800??
Что такое "23-00-00-00"?? Это формат "hhmm"?
Нормальный "например", ничего не скажешь.
Вопрос внятно задать не можете?
24 июл 12, 09:37    [12906447]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить