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

Откуда:
Сообщений: 161
Доброе утро! (Хабаровск))


В запросе есть поле day_of_week из семи символов (0 или 1) - дни недели.
Как можно выразить это в строке, пропуская через запрос?
Ну что-то типа '-ВТ-СР--ПТ--ВС'

    case  day_of_week WHEN '0000000' then '' else
          case substring(day_of_week,1,1) when '1' then 'ПН-' else  '-' end
          case substring(day_of_week,2,1) when '1' then 'ВТ-' else '-' end,
          case substring(day_of_week,3,1) when '1' then 'СР-' else '-' end,
          case substring(day_of_week,4,1) when '1' then 'ЧТ-' else '-' end,
          case substring(day_of_week,5,1) when '1' then 'ПТ-' else '-' end,
          case substring(day_of_week,6,1) when '1' then 'СБ-' else '-' end,
          case substring(day_of_week,7,1) when '1' then 'ВС-' else '-' end
    end as Day_W,
4 фев 12, 01:03    [12031154]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а примерчик можно?
пример исходных данных и ожидаемого результата?
4 фев 12, 01:16    [12031194]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
Freeze729
Member

Откуда:
Сообщений: 161
Поле day_of_week это строка из 7 текстовых символов. Нули или единицы.
0 - день недели не выбран, 1 - день недели выбран.

'0000000' -значит ничего не выбрано по дням недели, то пустая строка.
'1000001' - это понедельник и воскресенье
'1111111' - это все дни недели
'0110110' - вторник, среда, пятница, суббота, ожидаемый результат '-ВТ-СР--ПТ--ВС'
4 фев 12, 01:23    [12031206]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Freeze729,

SELECT 7&1, 6&1
4 фев 12, 04:27    [12031610]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
aleks2
Guest
declare @n table(n int primary key clustered)
declare @d table(d nvarchar(2), n int identity(0,1) primary key clustered)

insert @n
select 0
union all
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7

insert @d(d)
select N'-'
union all
select N'ПН'
union all
select N'ВТ'
union all
select N'СР'
union all
select N'ЧТ'
union all
select N'ПТ'
union all
select N'СБ'
union all
select N'ВС'

declare @s varchar(7), @ns varchar(14)

set @s='0110110'
set @ns=''

select @ns=@ns+'-'+B.d
FROM (select cast(SUBSTRING(@s,n,1) as int)*n x FROM @n WHERE n between 1 and 7) A INNER JOIN @d B ON B.n=A.x

select @ns


Переделать через FORXML Path('') и захерачить в CROSS APPLY
4 фев 12, 07:48    [12031670]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
Freeze729, так можно как ты и написал, только вместо "," после кейсов нужно "+":

declare @day_of_week varchar(7)
set @day_of_week = '0100010'
select case @day_of_week
            when '0000000' then ''
            else case substring(@day_of_week, 1, 1)
                      when '1' then 'ПН-'
                      else '-'
                 end +
                 case substring(@day_of_week, 2, 1)
                      when '1' then 'ВТ-'
                      else '-'
                 end +
                 case substring(@day_of_week, 3, 1)
                      when '1' then 'СР-'
                      else '-'
                 end +
                 case substring(@day_of_week, 4, 1)
                      when '1' then 'ЧТ-'
                      else '-'
                 end +
                 case substring(@day_of_week, 5, 1)
                      when '1' then 'ПТ-'
                      else '-'
                 end +
                 case substring(@day_of_week, 6, 1)
                      when '1' then 'СБ-'
                      else '-'
                 end +
                 case substring(@day_of_week, 7, 1)
                      when '1' then 'ВС-'
                      else '-'
                 end
       end
4 фев 12, 11:49    [12031880]     Ответить | Цитировать Сообщить модератору
 Re: SQL Case  [new]
Freeze729
Member

Откуда:
Сообщений: 161
Вот она рыба моей мечты. Спасибо всем! Получилось!
4 фев 12, 12:01    [12031901]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить