不允许从数据类型 date 到 bigint 的显式转换

Explicit conversion from data type date to bigint is not allowed

这过去适用于 DATEIME 的列类型,但现在不适用于 DATE

CONVERT(BIGINT,ev.StartDate) * -1

是否可以从 DATE 列中获取 BIGINT 值?

您可以cast开始日期为datetime进行转换。

CONVERT(BIGINT,CAST(ev.StartDate as DATETIME)) * -1

您可能需要先转换为 varchar,然后再转换为 bigint

select Convert(bigint,convert(varchar(10),ev.StartDate,112))*(-1)

还有一个选择。这甚至会为您翻转标志

例子

Declare @YourTable table (StartDate date)
Insert Into @YourTable values ('2017-05-30')

Select DateDiff(DAY,StartDate,-1)
 From @YourTable

Returns

-42884

首先,SQL服务器中的日期是从1900年开始按天数计算的。big int在21亿左右开始有用。这对应于 580 万范围内的一年。你真的有那么大的日期吗?

当然,转换为 int 是不允许的。您可以转换 datetime 值。 . .但是还有其他方法吗?

一个简单的方法是:

select 1 + datediff(day, 0, datecol)

需要“+ 1”,以便值与实际转化相匹配。 (您可以使用“-1”代替“0”。)

或者,您可能需要以秒或毫秒为单位的 Unix 时间。为此:

select datediff_big(ms, '1970-01-01', datecol)