我有一张桌子,上面有varchar
称为的列birthday
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`birthday` varchar(30) COLLATE utf16_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci AUTO_INCREMENT=5 ;
INSERT INTO `test` (`id`, `birthday`)
VALUES (1, '20041225'),
(2, '2004-12-25'),
(3, '19941225'),
(4, '19941201');
我尝试运行这个查询:
SELECT str_to_date(birthday,"%Y%m%d")
FROM `test`
WHERE 1
但它总是返回具有空值的行。
如果我运行查询:
SELECT str_to_date('20141225',"%Y%m%d")
FROM `test`
WHERE 1
它会返回2014-12-25
那么我的查询有什么问题吗?
留给更简单的功能 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dates. DATE()
以 YYYY-MM-DD 格式返回字符串的日期部分:
SELECT DATE(birthday) FROM `test`
Result:
2004-12-25
2004-12-25
1994-12-25
1994-12-01
您的代码不起作用的原因是STR_TO_DATE()
期望相同的输入和输出格式,例如STR_TO_DATE('2014-08-29', '%Y-%m-%d')
。看看文档中的示例 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date。该函数主要用于将日期或时间从一种格式转换为另一种格式,其中原始格式是来自 MySQL 外部的格式,并且您想要将数据导入到 MySQL 的日期格式中 - 在这种情况下,您将知道原始格式是什么日期格式是。
Example:
SELECT STR_TO_DATE('20041225', '%Y-%m-$d'); -- null - formats don't match
SELECT STR_TO_DATE('2004-12-25', '%Y-%m-%d'); -- 2004-12-25 - formats match
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)