MYSQL:如何将包含日期的VARCHAR列转换为DATE列?

时间:2010-11-19 10:09:14

标签: mysql date varchar

我有一个大型生日表,我想将varchar列转换为日期列。

表SQL是:

CREATE TABLE `birthdays` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uid` bigint(20) DEFAULT NULL,
  `birthday_date` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM

生日日期以两种方式之一存储:字符串如“05/26/1994”或有时“03/14”(对于不想透露出生年份的人)。

创建另一个表并将生日存储在日期列中的最佳方法是什么?是否可以使用MySQL执行此操作(并避免使用PHP或其他中介)?

我在MySQL中找到了一个STR_TO_DATE函数。我应该用这个吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

SELECT IF(birthday_date RLIKE '[0-9]{2}/[0-9]{2}/[0-9]{4}',STR_TO_DATE(birthday_date,'%m/%d/%Y'),STR_TO_DATE(birthday_date,'%m/%d'));

对于没有输入年份的行,这将导致0000-03-14之类的日期。您的服务器需要配置为允许无效日期(请参阅http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

答案 1 :(得分:1)

如果您将列转换为DateTime,那么您将无法存储缺少哪一年的“03/14”等日期。所以相反,我建议保持这个原样,如果你确实需要,可能还有另一个用于存储dateTime的列。 还有内部触发器将日期字符串从varchar列转换为dateTime列。

是的,你必须使用STR_TO_DATE方法来达到目的。