我需要将Datetime字段转换为特定格式的INT类型。例如,我想要
2000-01-01 00:00:00.000
要转换为20010101
。
在查询中进行比较以进行比较的最佳效果是什么?
类似的东西:
DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 +
DATEPART(day, orderdate)
或
cast(convert(char(8), orderdate, 112) as int)
最有效的方法是什么?
答案 0 :(得分:22)
cast(convert(char(8), orderdate, 112) as int)
的例子对我来说似乎不错。它可以快速将日期缩减到您需要的格式并转换为int。
从执行计划的角度来看,两者似乎没有区别。
答案 1 :(得分:0)
您可以尝试使用TSQL内置函数。 它不是.NET tick兼容的,但仍然可以快速排序,您可以按需选择GRANULARITY:
date
答案 2 :(得分:-1)
这是你需要的吗
SELECT REPLACE(CONVERT(VARCHAR(10),'2010-01-01 00:00:00.000',101),'-','')
答案 3 :(得分:-2)
当您在代码中直接传递“2010-01-01 00:00:00.000”时,SELECT语句将其视为字符串而不是日期时间数据类型。它与直接选择日期时间字段不同。
没有必要进行外部CAST,因为SQL Server将进行隐式转换,这是一个证明。
DECLARE @t DATETIME = '2010-01-10 00:00:00.000',@u INT
SELECT @u = CONVERT(CHAR(8), @t, 112)
IF ISNUMERIC(@u) = 1
PRINT 'Integer'