你好,我需要专家建议我的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:我
答案 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