我有一个表格,其中所有列都是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 ... ;
答案 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
的所有行。