2017-05-30 128 views
1

这用于使用列类型DATEIME,但现在不会与DATE一起使用。不允许从数据类型date到bigint的显式转换

CONVERT(BIGINT,ev.StartDate) * -1 

反正有获得从DATEBIGINT价值?

+1

为什么不直接使用'选择DATEDIFF(日, '1900年/ 01/01',ev.StartDate)'和避免它一起.... – scsimon

+1

如果要转换日期的整数, ) –

+0

'SELECT CAST(CAST('2017-05-30 00:00:00.000'as datetime)AS decimal(8,2))''将返回'42883'并且返回'SELECT CAST(CAST('2017-05-30 12:00:00.000'AS datetime)为十进制(8,2))'将返回'42883.50',因此每一天都代表一个单一的数字,从1900年开始。 –

回答

2

另一个选择。这甚至将翻转标志为您

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

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

返回

-42884 
4

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

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

'startDate'的数据类型是什么? –

0

您可能需要转换为varchar,然后BIGINT

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

首先,在SQL Server的日期是由天从1900年的一大INT计在21亿美元左右开始有用。这相当于一年580万的范围内。你的日期真的很大吗?

当然,铸造到int是不允许的。您可以投射datetime值。 。 。但有其他方法吗?

一种简单方式是:

select 1 + datediff(day, 0, datecol) 

的 “+ 1”,需要这样的值的实际转换相匹配。 (您可以使用“-1”代替“0”。)

或者,也许您希望Unix时间以秒或毫秒为单位。对于:

select datediff_big(ms, '1970-01-01', datecol) 
相关问题