我需要比较2个日期,我有一个日期时间和一个varchar。 为此,我将我的varchar转换为日期时间,然后将其插入临时表中。
我尝试使用cte,但它没有用,只需简单的选择即可。
为什么我的请求使用临时表而不是cte?
使用表格:
DECLARE @Tb TABLE
(
DateCreation DATETIME,
DateAchat DATETIME
)
insert into @Tb
SELECT
Convert(datetime, DateCreation, 120), -- varchar
Convert(datetime, DateAchat, 103), -- datetime
FROM MyTable
SELECT DISTINCT * FROM @Tb WHERE DateAchat > DateCreation ORDER BY OrderId ASC
使用CTE:
WITH cte ( DateCreation, DateAchat )
AS (
SELECT
Convert(datetime, DateCreation, 120), -- varchar
Convert(datetime, DateAchat, 103), -- datetime
FROM MyTable
)
SELECT DISTINCT * FROM cte WHERE DateAchat > DateCreationenter code here
答案 0 :(得分:0)
你的CONVERT表达式中的列名称周围有单引号 - 如果你引用列,这是不正确的。对于已经是DATETIME的值,您也不需要CONVERT。
WITH cte ( DateCreation, DateAchat )
AS (
SELECT
Convert(datetime, DateCreation, 120), -- varchar
Convert(datetime, DateAchat, 103) -- datetime
FROM MyTable
)
SELECT DISTINCT * FROM cte WHERE DateAchat > DateCreation
DATETIME数据类型的范围是1753年1月1日到9999年12月31日。如果您需要更宽范围或更精确的时间,那么您可以使用DATETIME2数据类型。