您好我需要专家建议我的mysql查询我试图过滤2个月之间的值
如果开始日较低,则不同月份的结束日一切正常
但是,如果我在开始时尝试更高的日值,则返回无
这是工作代码
SELECT id, teslim_tarihi AS tarih, toplam, marka, model, malzeme
FROM ariza
WHERE durum = '7' AND (teslim_tarihi BETWEEN '01-02-2018 00:00' AND '01-03-2018 23:59')
ORDER BY tarih DESC
根本不工作
SELECT id,teslim_tarihi as tarih ,toplam,marka,model,malzeme
FROM ariza
WHERE durum = '7' AND (teslim_tarihi BETWEEN '14-02-2018 00:00' AND '01-03-2018 23:59')
ORDER BY tarih DESC
日期格式dd-mm-yyyy H:i
正如@stackFan所建议的那样,坚持使用mysql的默认日期和时间格式确实很有意义。但是,无论出于何种原因,您似乎都陷入了不同的格式,因此我将尝试使用它。
您当前的查询在第二个示例中不起作用,因为mysql不会将这些视为日期,并且从'14 -02-2018'开始的字符串大于从'01 -03-2018'开始的另一个字符串。例如
SELECT '14-02-2018' > '01-03-2018';
+-----------------------------+
| '14-02-2018' > '01-03-2018' |
+-----------------------------+
| 1 |
+-----------------------------+
使用BETWEEN时的值... AND必须先得到最小值和最大值Documentation,所以在你的第二个例子中,比较是错误的回合,因为'14 -02-2018'大于'01 -03- 2018',因此没有返回任何行。
您没有回答有关teslim_tarihi
列的数据类型的查询,这会使您更简单地回答查询。我假设它是DATETIME或TIMESTAMP。你的比较应该是针对mysql知道的日期或者识别为日期的东西,这意味着将日期变成YYYY-MM-DD or YY-MM-DD格式。如果格式是它识别的格式,Mysql将有助于将值转换为适当的类型。例如
SELECT DATE '2018-02-14' < '2018-03-01';
+-----------------------------------+
| DATE '2018-02-14' < '2018-03-01' |
+-----------------------------------+
| 1 |
+-----------------------------------+
您应该能够通过以下列方式将字符串转换为日期来使查询正常工作。
SELECT DATE '2018-03-01'
BETWEEN STR_TO_DATE('14-02-2018 00:00', '%d-%m-%Y %H:%i')
AND STR_TO_DATE('01-04-2018 23:59','%d-%m-%Y %H:%i') 'between dates';
+---------------+
| between dates |
+---------------+
| 1 |
+---------------+
如果您的列teslim_tarihi
是VARCHAR,那么以相同的方式转换它以使查询起作用。
根据documentation,MySQL中默认的日期格式是YYYY-MM-DD。您可以尝试使用此查询吗?
SELECT id,teslim_tarihi as tarih ,toplam,marka,model,malzeme
FROM ariza
WHERE durum = '7' AND (teslim_tarihi BETWEEN '2018-02-14 00:00:00' AND '2018-03-01 23:59:59')
ORDER BY tarih DESC