Sql 如何获取日期不正确的所有列

Sql 如何获取日期不正确的所有列,sql,sqlite,Sql,Sqlite,我有一个表,其中所有列的类型都是TEXT。有一个名为PurchaseDate的字段,其中包含一个日期值(但其存储格式如前所述为文本格式) OrderDate具有“dd-mm-yyyy”模式的数据(即日期) 我的目标是确定特定字段是否具有“mm dd yyyy”格式的数据 我知道我必须查询那些与此模式不匹配的记录,以确定存储在字段中的数据是否可供使用 但是,如何为此编写查询呢 编辑: 到目前为止,我唯一想到的是一种MS Sql server解决方案。然而,即使这样也不能提供获取记录列表的方法。在“

我有一个表,其中所有列的类型都是
TEXT
。有一个名为
PurchaseDate
的字段,其中包含一个日期值(但其存储格式如前所述为文本格式)

OrderDate具有“dd-mm-yyyy”模式的数据(即日期)

我的目标是确定特定字段是否具有“mm dd yyyy”格式的数据

我知道我必须查询那些与此模式不匹配的记录,以确定存储在字段中的数据是否可供使用

但是,如何为此编写查询呢

编辑:

到目前为止,我唯一想到的是一种MS Sql server解决方案。然而,即使这样也不能提供获取记录列表的方法。在“选择”列表中放置类似于以下内容的内容:

Select CONVERT(VARCHAR(10), OrderDate, 101), ... From ... ;
1) 正如您所建议的,您可以尝试使用regexp: 但是T-SQL中的regexp支持对我来说似乎非常有限

2) 你可以检查一下这个,看看接受的答案是否对你有帮助。

要查找已知日期不正确的记录,请搜索假定月份(第四个和第五个字符)大于12的日期:

SELECT * FROM Orders WHERE substr(OrderDate, 4, 2) > '12'

这对两种格式都可能正确的日期都没有帮助,例如,日期和月份值最多为12。

我假设您正在筛选数据,因此我将使用
where
子句

SELECT * FROM Orders WHERE DATE(SUBSTR(OrderDate, 7)||SUBSTR(OrderDate, 3, 4)||SUBSTR(OrderDate, 1, 2)) IS NULL;

这将选择
OrderDate
无效的所有行
DD-MM-YYYY

您尝试了什么吗?如果您的日期是2013年1月1日,您将如何确定它是“dd-mm-yyyy”还是“mm-dd-yyyy”?到目前为止您尝试了什么?鉴于7月6日和6月7日的“06-07-2013”和“07-06-2013”均有效,您如何区分它们?有人能告诉我如何在查询中使用regexp子句吗?不正确的日期是什么意思?2012年2月31日这是错误的吗?@VijaykumarHadalgi这可能是一个案例……另一个案例,假设您所在的地区是我们,那么上述日期是错误的,因为一个月不可能是31,永远。
SELECT * FROM Orders WHERE DATE(SUBSTR(OrderDate, 7)||SUBSTR(OrderDate, 3, 4)||SUBSTR(OrderDate, 1, 2)) IS NULL;