Tsql 将DateTime转换为Int格式的最有效方法

Tsql 将DateTime转换为Int格式的最有效方法,tsql,sql-server-2000,Tsql,Sql Server 2000,我需要将Datetime字段转换为特定格式的INT类型。例如,我想要 2000-01-01 00:00:00.000转换为20010101 在查询中进行比较转换最有效的方法是什么 比如: DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 + DATEPART(day, orderdate) 或 最有效的方法是什么 这就是你需要的吗 SELECT REPLACE(CONVERT(VARCHAR(10

我需要将Datetime字段转换为特定格式的INT类型。例如,我想要 2000-01-01 00:00:00.000转换为20010101

在查询中进行比较转换最有效的方法是什么

比如:

DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 + 
    DATEPART(day, orderdate)

最有效的方法是什么

这就是你需要的吗

SELECT REPLACE(CONVERT(VARCHAR(10),'2010-01-01 00:00:00.000',101),'-','')
您的castconvertchar8,orderdate,112 as int示例对我来说很好。它可以快速地将日期转换为所需的格式,并转换为整数


从执行计划的角度来看,两者似乎没有区别。

当您直接在代码中传递“2010-01-01 00:00:00.000”时,SELECT语句将其视为字符串而不是日期时间数据类型。这与直接选择datetime字段不同

不需要执行外部强制转换,因为SQLServer将执行隐式转换,下面是一个证明

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'

您可以尝试使用TSQL内置函数。 它与.NET tick不兼容,但仍然可以快速排序,您可以根据需要选择粒度:

选择setup.DateToINTGETDATE,4-将输出2019-06-06的2019年12:00.456 选择setup.DateToINTGETDATE,6-将输出2019-06-06的201906 12:00.456 选择setup.DateToINTGETDATE,20-将为2019-05-05 12:00.456输出20190606120045660 创建函数设置。DateToINT@datetimeDATETIME,@length int 返回 带SCHEMABINDING的BIGINT作为 开始 返回CONVERTBIGINT, 子串 替换 替换 第25页,获取日期,121 ,'-', ,':', ,' ', ,'.', ,0 ,@length+1 终止 去
这比castconvertchar8、orderdate、112和int要多得多,后者同样有效。您的示例甚至没有考虑转换为INT。简单回答:测试两者,看看哪一个更好,例如更快,使用更少的CPU,使用更少的读/写,等等。您所指的是选择CONVERTINT,转换为'2013-08-05 09:23:30',因为转换产生的日期时间是隐式的
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'