Как преобразовать столбец datetime2 в bigint с указанием даты - PullRequest
0 голосов
/ 12 июня 2019

У меня есть столбец с именем 'order_confirmation_date' в формате Datetime2, и мне нужно, чтобы он работал с bigint с приведенным ниже запросом, который использует datediff b / w значение столбца и getdate ().

SELECT 
   datediff(day, convert(VARCHAR(10), 
   NULLIF((                                             
       CASE WHEN cast(replace(convert(varchar(10),cast(fpo.order_confirmation_date as date)),'-','') as bigint) >= cast([dbo].[fnGetFormatedDate](getdate(), 'YYYYMMDD') AS BIGINT)

            THEN fpo.order_confirmation_date                                                
            ELSE NULL

            END
                                        ), 0),112), GETDATE()) * (- 1) AS ordconf_x_days_fromtoday
    FROM bidb.fact_purchase_order fpo

Сообщение 50000, Уровень 16, Состояние 2, Строка 1409 Столкновение с типом операнда: datetime2 несовместим с bigint

1 Ответ

0 голосов
/ 12 июня 2019

У вас уже есть даты.Перестаньте так усердно работать, и пусть ваши даты будут датами.

declare @t table (order_confirmation_date datetime2);
insert @t 
values ('20190524'),('20190722'),(CAST(GETDATE() AS date))

SELECT 
  fpo.order_confirmation_date,
  datediff(day, CAST(getdate() AS date),fpo.order_confirmation_date)
 AS ordconf_x_days_fromtoday
FROM @t fpo

Результаты:

+-----------------------------+--------------------------+
|   order_confirmation_date   | ordconf_x_days_fromtoday |
+-----------------------------+--------------------------+
| 2019-05-24 00:00:00.0000000 |                      -19 |
| 2019-07-22 00:00:00.0000000 |                       40 |
| 2019-06-12 00:00:00.0000000 |                        0 |
+-----------------------------+--------------------------+

Редактировать: Если вы хотите, чтобы даты в прошлом возвращали NULL:

SELECT 
  fpo.order_confirmation_date,
  CASE 
    WHEN fpo.order_confirmation_date < GETDATE() THEN NULL
    ELSE datediff(day, CAST(getdate() AS date),fpo.order_confirmation_date)
  END AS ordconf_x_days_fromtoday
FROM @t fpo
...