Выбор возвращает результаты с прошлого дня, по понедельникам не возвращает пятницу - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть выборка, которая возвращает результат предыдущего дня.все в порядке, но, приходите в понедельник, он возвращает результат в воскресенье, и мне нужно, чтобы он вместо этого возвратил предыдущие результаты пятницы.

Я пытался вернуться назад на 3 дня, когда дата и время понедельник, но это не такработает.

это то, с чего я начал

SELECT no, nome, obrano, datafinal  
    FROM bo
    WHERE nmdos LIKE '%preço%'
    AND datafinal = DATEADD(day, -1, CONVERT(date, GETDATE()))

это то, где я нахожусь на

SELECT no, nome, obrano, datafinal  
    FROM bo
    WHERE nmdos LIKE '%preço%'
    AND datafinal = DATEADD(day, - case convert (datetime, 'Dy') when 'Mon' then 3 else 1 end, CONVERT(date, GETDATE()))

я просто получаю все ошибки преобразования, не получаюпочему

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Ваша проблема SELECT convert (datetime, 'Dy').Это уже выдает ошибку:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Избегайте проверки даты с именами (например, Monday, March, Jan и т. Д.), Это может измениться в зависимости отнастроенный язык.Правильная форма, которую вы ищете (я думаю):

SELECT DATENAME(WEEKDAY, GETDATE()) -- Returns 'Tuesday'

Лучшее решение - установить DATEFIRST на известное значение (для DATEPART WEEKDAY) и провести сравнение с днем.число.Вы можете использовать CASE, чтобы изменить -1 на -3:

SET DATEFIRST 1 -- 1: Monday, 7: Sunday

SELECT 
    no, 
    nome, 
    obrano, 
    datafinal  
FROM 
    bo
WHERE 
    nmdos LIKE '%preço%' AND 
    datafinal = DATEADD(
        DAY,
        CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 1 -- If today is monday
            THEN -3 ELSE -1 END
        CONVERT(DATE, GETDATE()))

Также рекомендуется написать полное ключевое слово datepart, чтобы оно не вызывало путаницы (вместо * введите 1022 *DW, MONTH вместо M и т. Д.).Вы не можете избежать маски, такие как yyyy-MM-dd хотя.

0 голосов
/ 19 февраля 2019

Это не имеет смысла:

case convert(datetime, 'Dy') when 'Mon'

Вы конвертируете строку 'Dy' в дату и затем сравниваете ее со строкой, которая не является датой / временем.

Это не то, как конвертировать работает.Я думаю, что вы хотите:

case datename('Dy', getdate()) when 'Monday' . . . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...