如何忽略SQL查询中的坏字符

如何忽略SQL查询中的坏字符,sql,sql-server,character,ignore,Sql,Sql Server,Character,Ignore,简而言之,我有一个SQL Server数据库,它带有varchar字段而不是datetime(不要问,这是一个很长的故事,无法修复)。不知何故,我们最近在这些字段中插入了奇怪的/随机的字符,而不是应该插入的字符(NULL、“”或YYYY-MM-DD)。类似这样的内容:“?+x”带有高位ascii字符 报表使用此查询帮助将数据转换为可用的内容(仅在此处发布相关部分): 但它正被这些新的坏数据所扼杀 我的问题是: 如何更新查询以忽略错误数据,以便在查找错误数据的来源时运行报告?我的首要任务是让报表正

简而言之,我有一个SQL Server数据库,它带有varchar字段而不是datetime(不要问,这是一个很长的故事,无法修复)。不知何故,我们最近在这些字段中插入了奇怪的/随机的字符,而不是应该插入的字符(NULL、“”或YYYY-MM-DD)。类似这样的内容:“?+x”带有高位ascii字符

报表使用此查询帮助将数据转换为可用的内容(仅在此处发布相关部分):

但它正被这些新的坏数据所扼杀

我的问题是:
如何更新查询以忽略错误数据,以便在查找错误数据的来源时运行报告?我的首要任务是让报表正常运行,其次是找到并消除坏数据的来源。

看来所有问题都解决了,谢谢!以下是我的最终结果:

CASE WHEN ISDATE(closeddate) = 1 THEN CAST(c.closeddate AS DATETIME) ELSE NULL END
ISDATE(closeddate)=1时的情况 然后强制转换(c.closeddate作为日期时间) @StartDate和@StartDate之间的ELSE NULL结束 @结束日期


现在开始打猎吧

事务数据库的要点是加强数据完整性。如果你已经有了不好的数据,那你就大错特错了。@Aaronaught-你只对了一半,预防总比治疗好,这样的数据永远不应该被允许进入。但不幸的是,处理这类事情是大多数团队工作的基本部分!!如果我在数据库中发现二进制垃圾,我会非常非常担心。这里不可能出现表损坏吗?它不是事务数据库(垃圾供应商平台,我们无法更改)。不要认为这是损坏,因为垃圾仅限于新条目的日期/时间字段(是varchar,不能更改)。谢谢,原来的帖子是WHERE条款的一部分(更新后更清晰)。我如何更新WHERE子句(我认为这就是它失败的地方)?
CASE WHEN ISDATE(closeddate) = 1 THEN CAST(c.closeddate AS DATETIME) ELSE NULL END