Показать рабочий день и выходные, используя регистр в SQL - PullRequest
0 голосов
/ 03 ноября 2019

У меня такой запрос:

select 
    F_Po_Date, 
    DATENAME (Weekday, F_Po_Date) as Name,
    (case when Name = 'Saturday or Sunday' then 'Weekend' else "Working" end) as 'OFfdays' 
from 
    T_assets

Я показываю все дни, если дата суббота или воскресенье, следующий столбец, который я хочу показать как выходные , в противном случаеЯ хочу показать работает

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2019

Вы должны использовать регистр следующим образом

   select F_Po_Date
  , DATENAME(Weekday,F_Po_Date) as Name
  , case when DATENAME(Weekday,F_Po_Date) IN  ('Saturday', 'Sunday' ) 
          then 'Weekend' 
          else "Working" end  as OFfdays 
  from T_assets

для проверки нескольких условий вы должны использовать предложение IN

или для нескольких вариантов вы можете использовать ИЛИ

   select F_Po_Date
  , DATENAME(Weekday,F_Po_Date) as Name
  , case when DATENAME(Weekday,F_Po_Date) = 'Saturday' 
                OR DATENAME(Weekday,F_Po_Date) = 'Sunday' ) 
          then 'Weekend' 
          else "Working" end  as OFfdays 
  from T_assets
0 голосов
/ 03 ноября 2019

К сожалению, datepart() и datename() могут возвращать разные значения в зависимости от настроек интернационализации.

Я бы порекомендовал format(), потому что вы можете гарантировать, что результаты будут работать независимо от серверанастройки :

select F_Po_Date, 
       format(F_Po_Date, 'dddd', 'en-us') AS Name,
       (case when format(F_Po_Date, 'ddd', 'en-us') in ('Sat', 'Sun') 
             then 'Weekend' else 'Working'
        end) as OFfdays
from T_assets;

Также используйте одинарные кавычки для строки (и константы даты). Не используйте одинарные кавычки для псевдонимов столбцов. На самом деле, даже не избегайте псевдонимов, если escape-символы не нужны.

...