2009-08-19 102 views
2

我有一个字符串字段在MySQL(从MSSQL进口日期字段),我使用下面的转换的字符串值,并将其放置在一个新的(MYSQL)日期时间字段,mysql字符串字段中的日期(数据)错误如何查找/验证?

更新TABLE_NAME集 STATUS_DATE = STR_TO_DATE(SUBSTRING_INDEX(SSTATUS_DATE,””,1), '%C /%E /%Y'),

某处表也有坏数据和所述查询停止和SO反转出结果我不知道如何找到不良数据记录来“修复”它的想法?我想只做一个简单的查询来确定哪些记录不转换? 错误消息说,CABANA不是一个日期,杜,我怀疑substr索引是搞砸了,所以我从前或后领域的数据,但我不知道,我不知道如何查询数据不好?即哪个不会通过转换?

+0

你能发布逐字错误吗?当我在早期的5系列MySQL中选择STR_TO_TIME('CABANA','%c /%e /%Y')时,我得到NULL和一个警告(不是错误),警告文本不一样作为你的叙述。 – pilcrow 2009-08-19 04:04:42

+0

STATUS_DATE字段是否定义为NOT NULL?我已经尝试了str_to_date函数的各种形式的输入,并且不能让它失败。无法解析的记录仅返回为NULL。 – 2009-08-19 04:31:08

回答

2

你可以尝试像

SELECT ID,SSTATUS_DATE从TABLE_NAME WHERE NOT(SUBSTRING_INDEX(SSTATUS_DATE,””,1)REGEXP“^ [0-9] +/[0-9] +/[0 -9] + $');

这会给你所有不符合00/00/00格式的行。

+0

我认为这就是我要找的,我同意其他海报,我不应该得到他们所描述的错误,但我知道了,所以我会给这个答案! – dartdog 2009-08-19 12:13:10

+0

很好的回答!我虽然那种正则表达式选择是要走的路,只是不知道如何!谢谢!! – dartdog 2009-08-19 14:53:00

0

您可以在update语句的WHERE子句中使用以下UDF。

CREATE FUNCTION IsDate (str VARCHAR(256)) 
    RETURNS INT 
BEGIN 
    DECLARE result INT; 

    IF (SELECT LENGTH(DATE(str)) IS NULL) THEN 
     SET result = 0; 
    ELSE 
     SET result = 1; 
    END IF; 

    RETURN tp; 
END