我使用SQL Server多年,我想我这里有一件非常奇怪的事情。
当我执行以下 2 个查询时:
SELECT CAST(CAST('2017-03-28' AS DATETIME) AS INT)
SELECT CAST(GETDATE() AS INT), GETDATE()
我得到这些输出:
42820
42821 2017-03-28 20:49:10.360
所以我对此完全一无所知; 2017年3月28日怎么能投到42820,2017年3月28日20:49投到42821?
为了让它更奇怪一点,我已经发现更高 1 的点是上午 12:00。我真的迷路了...
有人可以开导我吗?
这是一个有趣的功能...不过,您可以通过先投射浮动来绕过它。
select cast(cast('20170328' as datetime) as int)
select convert(int,convert(float,getdate()))
Rextester 演示:http://rextester.com/YVXUJ72002
两者都返回42820
投射日期时间从 12:00:00 开始四舍五入
SELECT CAST(CAST('2017-03-28 12:00:00' AS DATETIME) AS INT)
SELECT CAST(GETDATE() AS INT), GETDATE()
SELECT CAST(CAST('2017-03-28 11:59:59' AS DATETIME) AS INT)
SELECT CAST(GETDATE() AS INT), GETDATE()
好的。很清楚它是如何工作的。但这对我来说是全新的。
四舍五入为一天:
--00:00:00~12:00:00
SELECT CAST(CAST('1900-01-01 00:00:00' AS DATETIME) AS INT)
--12:00:00~24:00:00
SELECT CAST(CAST('1900-01-01 12:00:00' AS DATETIME) AS INT)
--00:00:00.000~11:59:59.994
SELECT CAST(CAST('1900-01-01 11:59:59.994' AS DATETIME) AS INT)
--11:59:59.995~23:59:59.999
SELECT CAST(CAST('1900-01-01 23:59:59.999' AS DATETIME) AS INT)