用cte比较2个日期

时间:2015-01-28 10:21:48

标签: tsql sql-server-2008-r2

我需要比较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

1 个答案:

答案 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数据类型。