mysql STR_TO_DATE 不工作

标签 mysql str-to-date

我有一个表,其中包含名为 birthdayvarchar

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

那么我的查询有什么问题吗?

最佳答案

留给simpler function秒。 DATE() 以 YYYY-MM-DD 格式返回字符串的日期部分:

SELECT DATE(birthday) FROM `test`

结果:

2004-12-25      
2004-12-25      
1994-12-25      
1994-12-01      

您的代码无法正常工作的原因是 STR_TO_DATE() 需要相同的输入和输出格式,例如STR_TO_DATE('2014-08-29', '%Y-%m-%d')。看看 examples in the documentation .此函数主要用于将日期或时间从一种格式转换为另一种格式,其中原始格式是来自 MySQL 外部的格式,并且您想将数据导入 MySQL 的日期格式,例如 - 在这种情况下,您将知道原始格式是什么日期格式为。

例子:

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

关于mysql STR_TO_DATE 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561169/

相关文章:

mysql - 仅检查数据库中数字字符的 SQL 查询

MySQl 和 R : Error connecting Database

c# - 从同一列检索多个值的有效方法

PHP & MySQL - 保存和循环问题

mysql - 使用 str_to_date 时忽略日期字符串中的字符

mysql - 尝试获取每 15 分钟的组数

PHP MySQL在唯一索引上创建重复记录奇怪失败

MySQL STR_TO_DATE() 函数返回 null

mysql - 使用两个列范围从 mysql 中选择数据

mysql - 如何在 MySQL 的 str_to_date 中使用 %U