Sql 根据值是否可以转换为日期筛选nvarchar列?
我有一个数据库表,它的ETL过程和内容我无法更改,它有一个Sql 根据值是否可以转换为日期筛选nvarchar列?,sql,sql-server,Sql,Sql Server,我有一个数据库表,它的ETL过程和内容我无法更改,它有一个nvarchar列,该列主要由日期字符串和null组成。然而,偶尔会出现“不适用”或“不接受”的情况 有没有办法只获取有效日期字符串的值 输入: 2019-01-01 N/A null 2019-03-04 输出 2019-01-01 2019-03-04 一种简单的方法是使用try\u cast()或try\u convert(): 尝试解析?请注意,这不是使用索引-不可搜索。糟糕的表现。试着在一个字段上解析一个函数,然后对该字段进
nvarchar
列,该列主要由日期字符串和null组成。然而,偶尔会出现“不适用”或“不接受”的情况
有没有办法只获取有效日期字符串的值
输入:
2019-01-01
N/A
null
2019-03-04
输出
2019-01-01
2019-03-04
一种简单的方法是使用
try\u cast()
或try\u convert()
:
尝试解析?请注意,这不是使用索引-不可搜索。糟糕的表现。试着在一个字段上解析一个函数,然后对该字段进行索引就行了。尽管修复数据本身(将其更改为
日期
)才是真正的解决方案,但我们不要拐弯抹角。您给出的两个示例的格式都是yyyy-MM-dd
,但我对您有01/02/03
这样的值并不感到惊讶,如果是这样的话,您会受到伤害。@Larnu我同意,但这是一个第三方数据库,他们已经告诉我他们不会修复它。“不会”并不意味着不应该或不能。我个人会敦促第三方修复它;这不是一个“功能”,而是一个bug,可能会就此发出支持电话。
select t.*
from t
where try_cast(datecol as date) is not null;