我目前正在尝试从具有一定范围的数据库中获取条目。表中找到的字符串是日期,其格式为yyyyMMdd
。编辑:存储为字符串;不是日期!
该表如下所示(无ID):
+----------+----------+----------+
| c1 | c2 | c3 |
+----------+----------+----------+
| 20161101 | 20161102 | 20161027 |
| 20131212 | 20161102 | 20161028 |
+----------+----------+----------+
使用以下代码,我可以在每一行的三列中获得最小的“值”:
SELECT MIN(c1, c2, c3) FROM my_table WHERE c1 IS NOT NULL AND c2 IS NOT NULL AND c3 IS NOT NULL;
+-----------------+
| MIN(c1, c2, c3) |
+-----------------+
| 20161027 |
| 20131212 |
+-----------------+
但是,当我尝试将其用作嵌套SQL查询的一部分时,仅获取例如在2015年至2017年之间(不包括第二行)使用此查询进行的:
SELECT * FROM my_table WHERE MIN(c1, c2, c3) IN (SELECT MIN(c1, c2, c3) FROM my_table WHERE c1 IS NOT NULL AND c2 IS NOT NULL AND c3 IS NOT NULL) BETWEEN '2015' AND '2017';
我什么都没有得到。我还测试了其他内容,例如
... LIKE '2016%'
(不产生任何结果)和... LIKE '%'
给出表中上面显示的所有结果。我想出去的是
+----------+----------+----------+
| c1 | c2 | c3 |
+----------+----------+----------+
| 20161101 | 20161102 | 20161027 |
+----------+----------+----------+
我假设我在嵌套的SELECT语句上使用不正确,但是经过2个小时的搜索和测试,我无法弄清楚出了什么问题。
我正在使用SQLite Studio 3.1.0测试查询,并使用本地sqlite 3数据库对其执行查询。
任何帮助深表感谢!如果我应该添加更多可能的输入/输出,请告诉我,以便我可以这样做。
最佳答案
您的逻辑似乎是要保留(c1
,c2
和c3
)的最小日期在2015年至2017年之间的记录。如果是这样,则应使用以下记录:
SELECT *
FROM my_table
WHERE STRFTIME('%Y-%m-%d', MIN(c1, c2, c3)) BETWEEN DATE('2015-01-01') AND DATE('2017-12-31')
此外,您应该将格式更改为
YYYY-mm-dd
。
关于sql - 嵌套的Select语句-使用两个字符串值之间的字符串获取数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398301/