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

时间:2018-03-01 15:28:15

标签: mysql date

你好,我需要专家建议我的mysql查询 我试图在两个月之间过滤值

如果开始日较低,那么不同月份的结束日一切正常

但是,如果我在开始时尝试更高的日值,则返回无

这是工作代码

Columns(5).Offset(0, -1).Select
Debug.Print Selection.Column '= 4

根本不工作

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

日期格式dd-mm-yyyy H:我

2 个答案:

答案 0 :(得分: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将有助于将值转换为适当的类型。 e.g。

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,则以相同的方式转换它以使查询生效。

答案 1 :(得分: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