我需要比较where子句中的日期值,即某个日期晚于另一个日期。出现的问题是我要比较的日期存储在varchar字段中。使事情变得更加复杂的是,简单的CONVERT将不起作用,因为存储在此varchar字段中的数据并不总是一个日期值,并且可以是任何旧版本(这是现有的数据库设计,很遗憾不能进行修改。代码。)
这是我目前拥有的一个粗略示例:
SELECT A.Value, B.Value, B.Value2
FROM Table A
JOIN Table B ON B.Id = A.Id
WHERE A.Value3 = 'Some String'
AND ISDATE(B.GubbinsField) = 1 AND CONVERT(DATETIME, B.GubbinsField, 120) >= A.DateField
对于我如何成功检查这些值的问题,是否有人有潜在的解决方案?
好了,您所走的路是正确的,所有要做的就是使比较运算符两侧的列数据类型相同。
当你做 CONVERT(DATETIME, B.GubbinsField, 120) >= A.DateField
基本上,您是将字符串值与日期时间值进行比较。由于更高的优先级,SQL Server将尝试将String转换为Datetime值。
您需要编写类似以下内容的查询...。
;WITH CTE
AS (
SELECT A.Value ValueA
, B.Value ValueB
, B.Value2
, A.DateField
,B.GubbinsField
FROM Table A
JOIN Table B ON B.Id = A.Id
WHERE A.Value3 = 'Some String'
AND ISDATE(B.GubbinsField) = 1
)
SELECT ValueA, ValueB, Value2
FROM CTE
WHERE CAST(GubbinsField AS DATETIME) >= DateField
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句