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

时间:2013-12-02 09:55:12

标签: sql sqlite

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

Create Table Orders (
    OrderID TEXT,
    OrderDate TEXT,
    ShippingAddr TEXT
)

OrderDate包含'dd-mm-yyyy'模式的数据(即日期)。

我的目标是确定特定字段是否包含'mm-dd-yyyy'格式的数据。

我知道我必须查询那些与此模式不匹配的记录,以确定存储在字段中的数据是否有效用于消费。

但是如何为此编写查询?

编辑:

到目前为止我唯一的想法是一种MS Sql服务器解决方案。然而,即使这样也没有提供获取记录列表的方法。您在选择列表中添加了以下内容:

Select CONVERT(VARCHAR(10), OrderDate, 101), ... From ... ;

3 个答案:

答案 0 :(得分:1)

要查找日期已知错误的记录,请搜索假定月份(第四个和第五个字符)大于十二的日期:

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

这对于任何格式都可能正确的日期没有帮助,即日期和月份值最多为12的日期。

答案 1 :(得分:0)

1)正如你自己建议你可以试试regexp: http://msdn.microsoft.com/en-us/library/ms179859.aspx 但是T-SQL中的正则表达式支持似乎非常有限。

2)你可以查看这个,看看接受的答案对你有帮助。 validate a date in t-sql?

答案 2 :(得分:0)

我假设您正在过滤数据,因此我将使用WHERE子句。

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

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