【发布时间】:2013-12-05 22:43:12
【问题描述】:
我有一个大型 SQL,它必须生成一些日期以使用并与 DATETIME 列进行比较,我还将该列转换为字符串,以便将字符串与字符串进行比较。但是 BETWEEN 可以处理字符串吗?
即
...
AND ((pur.StudyYearID <= @StudyYear
AND CONVERT(varchar, pur.StartDate, 112) BETWEEN CONVERT(varchar, GETDATE(), 112)
AND CONVERT(varchar, CAST(CAST(YEAR(DATEADD(YEAR, 1, GETDATE())) AS varchar) + '1231' AS DATETIME), 112))
OR (pur.StudyYearID > @StudyYear
AND CONVERT(varchar, pur.StartDate, 112) BETWEEN STR(YEAR(GETDATE()) + SUBSTRING(pur.StudyYearID, 2, 1) - SUBSTRING(@Workgroup, 1, 1)) + '0101'
AND STR(YEAR(GETDATE()) + SUBSTRING(pur.StudyYearID, 2, 1) - SUBSTRING(@Workgroup, 1, 1)) + '1231'))
...
我无法确定它,但我“认为”这是有效的。但是,我对 BETWEEN 持怀疑态度。 BETWEEN 是否仅适用于诸如 DATETIME 数据类型之类的真实日期,还是可以像我在上面对字符串所做的那样工作?如果不是,我想我必须删除 BETWEEN 并用可怕的 >= 和
顺便说一下,上面的每个日期字符串计算都有效,因为我已经单独测试了它们,并且确实得到了 YYYYMMDD 格式的日期。
谢谢
更新 上面的重点是避免在比较字符串时使用 >= 和
@StudyYearID 可以是 [S1,S2,S3 或 S4] 中的任何内容 @WorkGroup 可以是 '1A,1B,1C,1D,1E 到 4E'
抱歉给您带来了困扰
【问题讨论】:
-
pur.StudyYearID和@Workgroup中可能的值是什么? -
StudyYearID = 'S1',工作组 = '1A'
标签: sql-server string datetime between