Структура стола там ужасная, я бы сделал все, что ты мог, чтобы избежать этого. При этом в mssql есть несколько функций для подстрок, которые вы можете использовать.
select dayoftheweek, timeoftheday 'open'
from uglytable
where right(dayofweek,4) = 'Open'
Это даст вам все открытые записи. Мы сделаем то же самое, чтобы получить все закрытые записи в секунду. Это будет связано с чтением открытых и закрытых
Второй вопрос, который необходимо решить, - это выборка столбца «день» из этого текста. Каждый день заканчивается на y и не содержит в себе никаких других y, поэтому мы можем использовать charindex
lil disclaimer ... У меня нет базы данных mssql, доступной для тестирования, так что я могу быть здесь и там.
select charindex('y',dayoftheweek)
Это вернет местоположение в строке символа 'y'.
Понедельник открыт у 6-го символа
select left('mondayopen',6)
Это вернет 6 левых символов mondayOpen или mondayClose. Соедините их вместе:
select left(dayoftheweek,charindex('y',dayoftheweek))
Надеюсь, я понял это правильно ... это должно привести к открытию понедельника и понедельника к понедельнику. Соедините их вместе:
select left(dayoftheweek,charindex('y',dayoftheweek)) dayofweek, timeoftheday 'open'
from uglytable
where right(dayofweek,4) = 'Open'
Теперь должно возвращаться день недели без «открытия» или «закрытия» вместе с временем открытия. Превратите его в подзапрос, присоедините его к подзапросу close и соедините:
select open.dayofweek, open.open,close.close
from
(select left(dayoftheweek,charindex('y',dayoftheweek)) dayofweek, timeoftheday 'open'
from uglytable
where right(dayofweek,4) = 'Open') open
inner join
(select left(dayoftheweek,charindex('y',dayoftheweek)) dayofweek, timeoftheday 'close'
from uglytable
where right(dayofweek,5) = 'Close') close
on open.dayofweek = close.dayofweek
Надеюсь, у меня нет синтаксических ошибок, нет ничего, что можно было бы проверить, и, возможно, есть опечатка ^^