0

我有一个名为test的mysql表,结构代码如下

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `assigned_date` date NOT NULL
) ENGINE=InnoDB

该表包含以下数据:

INSERT INTO `test` (`id`, `name`, `assigned_date`) VALUES
(0, 'A', '2012-12-23'),
(0, 'B', '2012-12-25');

现在的问题是,当我运行以下查询时,它没有返回任何行。

SELECT name 
FROM test 
WHERE 
     DATE_FORMAT(assigned_date, '%m/%d/%Y') >= '12/01/2012'
     AND 
     DATE_FORMAT(assigned_date, '%m/%d/%Y') <= '01/02/2013'

但是当我使用以下命令时,它会按预期返回两行。

SELECT name 
FROM test 
WHERE
     assigned_date >= STR_TO_DATE('12/01/2012', '%m/%d/%Y')
     AND 
     assigned_date  <= STR_TO_DATE('01/02/2013', '%m/%d/%Y')

有什么区别 ?为什么DATE_FORMAT不起作用?

请帮忙解决这个问题我已经在一个站点中使用了 date_format 函数。现在看来我必须更新整个网站。

谢谢。

4

3 回答 3

11

DATE_FORMAT将 DATE 转换为 STRING。

STR_TO_DATE将 STRING 转换为 DATE。

来自 MySQL 文档

于 2013-01-02T10:11:35.583 回答
2

DATE_FORMAT 不起作用,因为它将assigned_date 转换为mm/dd/yyyy 格式的字符串,然后将该字符串与您的两个字符串常量进行比较-并且没有>= 以12 开头的字符串和<= 以字符串开头的字符串01.

于 2013-01-02T10:20:24.417 回答
0

DATE_FORMAT() 函数格式化由格式掩码指定的日期。

DATE_FORMAT(date, format_mask)
Example:
SELECT DATE_FORMAT("2017-06-15", "%M %d %Y");
SELECT DATE_FORMAT(BirthDate, "%W %M %e %Y") FROM Employees;

MySQL STR_TO_DATE() 通过将字符串和特定格式字符串作为参数返回一个日期时间值。

STR_TO_DATE(str,format);
Example:
SELECT STR_TO_DATE('18,05,2009','%d,%m,%Y');
SELECT STR_TO_DATE('May 18, 2009','%M %d,%Y');
于 2017-10-24T06:35:49.603 回答