在mysql数据库中,我有一个 YEAR
, MONTH
, DAY
柱。
| YEAR | MONTH | DAY | VALUE |
|----------------------------|
| 2018 | 11 | 9 | 1056 |
| 2018 | 11 | 10 | 6582 |
|****************************|
| 2018 | 12 | 9 | 6892 |
| 2018 | 12 | 10 | 5987 |
|****************************|
| 2019 | 3 | 5 | 5693 |
| 2019 | 3 | 6 | 5698 |
我需要从表中取2个日期之间的所有值。
比如说在 2018-11-09
以及 2019-03-05
或介于 2018-11-10
以及 2018-12-09
.
很不幸,我不能把这三列合并为一列 datetime
列。表也有3列的分区。
列的数据类型: smallint(6)
2条答案
按热度按时间9rbhqvlz1#
看来这个查询应该会给你想要的结果。它从3列中创建一个日期字符串,然后使用
STR_TO_DATE
将其转换为mysql可以与搜索日期字符串进行比较的值。输出
在dbfiddle上演示
xam8gpfp2#
一种方法是创建mysql日期格式的字符串(
YYYY-MM-DD
)使用字符串函数,例如Concat()
以及Lpad()
:根据评论中的进一步讨论,如果可以分别输入给定数据范围的年、月和日值;我们可以直接使用相应的列,而不是使用函数创建日期。这还允许我们在这些列上使用索引(如果定义了索引)。
上述条件可以进一步压缩。但我是这样写的,为了便于理解能力。
但是,建议创建另一列以日期格式存储日期。如果无法更改应用程序代码,并且mysql版本>=5.7,则可以查看生成的列,并在
SELECT
改为查询。然后
SELECT
查询变得琐碎: