在我的数据库中,我有一列Period
的列int
,其值采用YYYYMM格式,例如201709。还有名为Date
类型的datetime
列,其值例如为2015-07-31 00:00:00.000。我想选择两列相等的行,例如Period
(201507)= Date
(201507)。
我尝试了以下代码:
SELECT TOP 100 *
FROM db
WHERE CONVERT(NVARCHAR, Period) = LEFT(CONVERT(NVARCHAR, (DATEADD(month, -11, Date)), 112), 6)
这样做将返回0行。
我也尝试过:
WHERE Period = CONVERT(INT, (LEFT(CONVERT(NVARCHAR, (DATEADD(month, -11, Date)), 112), 6)))
我当然是第一次尝试:
WHERE Period = LEFT(CONVERT(NVARCHAR, (DATEADD(month, -11, Date)), 112), 6)))
我已经在数据库中检查了值应该匹配的行。
如何检索我想要的行?
答案 0 :(得分:1)
最简单的方法是从日期字段中提取“年”和“月”分量并将其格式化为整数。
WHERE Period = YEAR(Date) * 100 + MONTH(Date)
答案 1 :(得分:0)
您需要将Period
转换为正确的格式,以与nvarchar
格式匹配以进行第二次比较:
您可以通过多种方法来执行此操作,其中一种方法是尝试使用CONVERT(NVARCHAR, Period)
代替它,然后查看是否对您有用:
CONVERT(NVARCHAR, Year(Period)) + CONVERT(NVARCHAR, Month(Period))