如何使用 datediff 将 datetime2 列转换为 bigint
How to convert datetime2 column to bigint with the datediff in place
我有一个名为 '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
Msg 50000, Level 16, State 2, Line 1409 Operand type clash: datetime2
is incompatible with bigint
你已经有约会了。别那么辛苦了,让你的约会对象成为约会对象吧。
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 |
+-----------------------------+--------------------------+
编辑: 如果你想要过去的日期 return 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
我有一个名为 '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
Msg 50000, Level 16, State 2, Line 1409 Operand type clash: datetime2 is incompatible with bigint
你已经有约会了。别那么辛苦了,让你的约会对象成为约会对象吧。
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 |
+-----------------------------+--------------------------+
编辑: 如果你想要过去的日期 return 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