我有一个大型生日表,我想将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函数。我应该用这个吗?
谢谢!
答案 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方法来达到目的。