2012-04-12 118 views
0

我试图转换正在导入到我的数据库的表(csv)中的列中的varchar值。现在我没有任何关于日期可能在csv文件中的格式的任何信息。我需要检查列中的所有值,如果有效,将这些列转换为mysql的DATE数据类型。问题是如果我使用str_to_date并且日期格式不同,那么存储过程抛出错误并停止执行。我需要一种方法来忽略该错误,以便存储过程可以完成其迭代。使用str_to_date将varchar转换为日期

另外我打算使用结果值来验证内容是否是有效日期?有没有更好的方法来做到这一点?请记住,我没有关于原始数据可能具有的日期格式的信息。

例如日期可能是'11 -Apr-2011','20110102','01-05-2011'等。 我需要支持一些4-5格式。 谢谢。

+0

01-05-2011:是5月1日还是1月5日? – Spudley 2012-04-12 19:54:08

+0

这将是5月初,我不会考虑mm-dd-yyyy格式。但基本上我需要hack来避免mysql存储过程在遇到“错误的日期时间值”错误时停止。我自己处理errors/null结果,我只需要mysql来完成它的迭代。 – AsG 2012-04-12 20:06:56

回答

0

既然你不知道的日期格式事先,你可以处理所有使用preg_match,如:

$regex = '<matches for dates>'; 
if (preg_match($regex, $stringToCheck)) { 
    str_to_date($stringToCheck); 
} else { 
} 

我不知道你会如何处理未知的情况下,而无需创建多个案例他们。 PHP如何知道格式是mm/dd/yy与dd/mm/yy?

+0

嗨,感谢您的快速回复。其实我在我的应用程序中使用Java与Java。不幸的是PHP不涉及:(。有什么替代preg_match在mysql? – AsG 2012-04-12 19:54:09

+0

愚蠢的堆栈,我有PHP过滤器:(你可以使用“LIKE”具有模式匹配功能,但你必须指定每个特定的日期模式。http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html – citizenen 2012-04-12 19:57:46

+0

好的,我会试试。顺便说一句,你认为在mysql中的REGEXP会有帮助吗? – AsG 2012-04-12 20:07:59

相关问题