我有一个名为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功能。现在看来我必须更新整个网站。
感谢。
答案 0 :(得分:11)
答案 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>