不允许从数据类型 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)
这过去适用于 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)