2个日期之间的mysql不能用于2个不同的月份

问题描述 投票:-1回答:2

您好我需要专家建议我的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

mysql date
2个回答
2
投票

正如@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,那么以相同的方式转换它以使查询起作用。


0
投票

根据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
© www.soinside.com 2019 - 2024. All rights reserved.