MySQL STR_TO_DATE v / s DATE_FORMAT

时间:2013-01-02 10:10:38

标签: mysql

我有一个名为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功能。现在看来我必须更新整个网站。

感谢。

3 个答案:

答案 0 :(得分:11)

DATE_FORMAT将DATE转换为STRING。

STR_TO_DATE将STRING转换为DATE。

来自MySQL文档

答案 1 :(得分:2)

DATE_FORMAT不起作用,因为它将assigned_date转换为mm / dd / yyyy格式的字符串,然后将该字符串与两个字符串常量进行比较 - 并且 没有字符串&gt; =从12开始的字符串和&lt; =从01开始的字符串。

答案 2 :(得分:0)

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

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');

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

<div class="form-group">
    <div class="col-md-12">
        <label for="#" class="col-sm-2 control-label">Related Packages</label>
        <div class="col-sm-9">
            <?php
            foreach ($selectdata as $r) {
                $t = $r->package_id;
            }
            $explode = explode("','", $t);
            $SlNo = 1;
            foreach ($record as $r2) {
                if (in_array($r2->package_name, $explode)) {
                    ?>
                    <div class="col-sm-6">
                        <div class="checkbox">
                            <input id="checkbox<?php echo $SlNo++; ?>" type="checkbox"
                                   value="<?php foreach ($explode as $e) {
                                       echo $e;
                                   } ?>" checked="checked">
                            <label for="checkbox<?php echo $SlNo++; ?>">
                                <?php echo $r2->package_name; ?>
                            </label>
                        </div>
                    </div>

                    <?php
                } else {
                    ?>
                    <div class="col-sm-6">
                        <div class="checkbox">
                            <input id="checkbox<?php echo $SlNo++; ?>" type="checkbox" name="package[]"
                                   value="<?php echo $r2->package_name; ?>">
                            <label for="checkbox<?php echo $SlNo++; ?>">
                                <?php echo $r2->package_name; ?>
                            </label>
                        </div>
                    </div>
                    <?php
                }
            }
            ?>
        </div>
    </div>
</div>