我有一个包含如下数据的表:
|-------|-------------------|
| id | expired |
|-------|-------------------|
| 1 | 03 Maret 2018 |
| 2 | 06 Juli 2018 |
| 3 | 02 April 2018 |
| 4 | 22 Agustus 2018 |
| 5 | 19 Juli 2018 |
| 6 | 27 Januari 2018 |
| 7 | 18 Mei 2018 |
| 8 | 13 Oktober 2018 |
|_______|___________________|
在expired
列中,我使用INDONESIA
的语言,而不是English
。
我想将网站上expired
的所有内容分开。
如果现在是日期(08 Maret 2018)
,那么应该有2个已过期的项目,包括:
id = 1
id = 6
但是我得到了不同的结果,结果是:
id = 1
id = 2
id = 3
我知道这些不合适的结果是由未被指定为数字的"month"
引起的。但我已将其更改为SQL。
以下是我使用的代码:
$replace_month = "replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(expired, 'Januari', '01'), 'Februari', '02'), 'Maret', '03'), 'April', '04'), 'Mei', '05'), 'Juni', '06'), 'Juli', '07'), 'Agustus', '08'), 'September', '09'), 'Oktober', '10'), 'November', '11'), 'Desember', '12')";
$dateNow = date('d m Y');
$sql = $db->query("SELECT id FROM MyTable WHERE '$dateNow' > $replace_month");
while($row = $sql->fetch_array()) {
echo 'ID : ' . $row['id'] . '<br>';
}
结果是:
1
2
3
我期待的是:
1
6
运行SQL时,"month"
列中的expired
已设置为数字,例如27 01 2018
,但为什么结果仍然错误?
错误在于不计数的月份,因此可以只计算日期和年份。
例如,现在注明March 08, 2018
,那么脚本只会查找08 only
以下的日期。至于月份被忽略了。这就是我的代码无法正常工作的原因。
任何人都可以帮助我?
答案 0 :(得分:0)
我认为查询将日期比较为字符串而不是日期格式。那么如何改变这样的日期格式呢。我希望这段代码可以正常工作。
mysql案例:
$sql = $db->query("SELECT id FROM MyTable WHERE
STR_TO_DATE('$dateNow', '%d %m %Y') > STR_TO_DATE(expired, '%d %M %Y')");
oracle案例:
$sql = $db->query("SELECT id FROM MyTable WHERE
TO_DATE('$dateNow', 'DD MM YYYY') > TO_DATE(expired, 'DD MONTH YYYY')");
如果过期是日期格式,则无需更改为日期格式。 我不知道DBMS可以支持月份字符串。 如果没有,请使用STR_TO_DATE($ expired,&#39;%d%m%Y&#39;)。