选择日期SQL替换月份数字不起作用?

时间:2018-03-18 12:27:06

标签: php sql database

我有一个包含如下数据的表:

|-------|-------------------|
|   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以下的日期。至于月份被忽略了。这就是我的代码无法正常工作的原因。

任何人都可以帮助我?

1 个答案:

答案 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;)。