В SQL Server, как иметь дату платежа, превышающую месяц и год, игнорируя часть дня? - PullRequest
0 голосов
/ 16 января 2020

В Oracle:

select 
    name, 
    case 
       when PaymentDate is not null 
            and PaymentDate <= to_date('202001','yyyyMM')
          then 'Paid'  
          else NotPaid
where 
    empId  in(%s)) ;

Мне нужен серверный эквивалент SQL вышеуказанного запроса. Мне просто нужно проверить месяц и год в части даты с месяцем и годом платежа. Пожалуйста, совет.

Нужен to_date('202001','yyyyMM') эквивалент в SQL Сервер.

Ответы [ 4 ]

0 голосов
/ 23 февраля 2020

select * from payment_table where month(payment_date) > 2 and year(payment_date) >= 2020;

0 голосов
/ 16 января 2020

Вот как узнать начало месяца. Вы можете применить его как к PaymentDate, так и к Date, а затем выполнить сравнение

SELECT DATEADD(month, DATEDIFF(month, 0, PaymentDate), 0) AS StartOfMonth
0 голосов
/ 16 января 2020

Oracle всегда возвращать 1-й день месяца, когда вы конвертируете в дату_. Так что в этом случае это 1 января 2020 года.

Обычно SQL сервер имеет формат даты по умолчанию в формате ГГГГ-ММ-ДД. Если вы хотите сопоставить дату в соответствии с SQL сервером, вам нужно манипулировать входной строкой в ​​соответствии с форматом даты

SELECT CAST ((LEFT ('202001', 4) + '-' + RIGHT ( '202001', 2) + '-01') как Дата)

Согласно вашему запросу

выберите имя, случай, когда PaymentDate не равен NULL и PaymentDate <= CAST ((LEFT (' 202001 ', 4) +' - '+ RIGHT (' 202001 ', 2) +' -01 ') в качестве даты), затем "Оплачено" <br>еще "NotPaid", где empId in (% s));

0 голосов
/ 16 января 2020

В Oracle, to_date('202001','yyyyMM') создает значение date, представляющее 1 января 2020 года.

Вы можете получить тот же результат на SQL Сервере с выражением, например cast('2020-01-01' as date) или cast('20200101' as date).

Если ваш ввод ('202001') поступает извне запроса и вы не можете изменить его значение, вы можете объединить '01' в конце: cast(concat(@myparam, '01') as date).


В остальной части запроса есть синтаксические ошибки:

  • пропущенные кавычки вокруг 'Not Paid'
  • пропущенное ключевое слово end в конце выражения case
  • отсутствует from предложение
  • лишние закрывающие скобки в конце запроса

Стоит также отметить, что условие в выражении case можно упростить удалив лишний предикат is not null:

select 
    name, 
    case when PaymentDate <= cast('2020-01-01' as date)
        then 'Paid'  
        else NotPaid
    end
from mytable
where empId in (%s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...