如何从包含 SQLquery 范围的列中查询数据
How to query a data from a column containing range in SQLquery
我有一个名为 scholars_
table 的 table,其中一列的名称为 validity
,其中包含如下数据:
2016-2019
2016-2020
2016-2017
2018-2019
我想要实现的是获取 $validity
在 validity
列的学者的 scholarID
。
例如,变量是 $year=2017
,我只想 select 具有 2017
的 validity
的那些 scholarIDs
。输出应该是这样的:
2016-2019
2016-2020
2016-2017
类似的,谢谢
首先,这是一种确实糟糕的数据存储方式。您的 scholars
table 应该只有 year_from
和 year_to
列。
但是,有时我们会被其他人的错误决定所困。您可以使用 MySQL 中的 substring_index()
处理此问题:
where $year between substring_index(range, '-', 1) + 0 and substring_index(range, '-', -1) + 0
+ 0
只是将每个值转换为数字。
不要那样存储数据。理想情况下应该有两列 validity start
和 Validity end
。
Validity Start 应该有所有的有效期开始年份,Validity end 应该有所有的有效期结束年份。
那么查询就很简单了
Select * from scholars_
Where 2017 between validity_start and validity_end
SELECT scholarID FROM scholars_ WHERE $data BETWEEN SUBSTRING_INDEX(SUBSTR(validity,1,4), '-', 1) + 0 AND SUBSTRING_INDEX(SUBSTR(validity,6,9), '-', -1) + 0
$data = 2015 or something
我有一个名为 scholars_
table 的 table,其中一列的名称为 validity
,其中包含如下数据:
2016-2019
2016-2020
2016-2017
2018-2019
我想要实现的是获取 $validity
在 validity
列的学者的 scholarID
。
例如,变量是 $year=2017
,我只想 select 具有 2017
的 validity
的那些 scholarIDs
。输出应该是这样的:
2016-2019
2016-2020
2016-2017
类似的,谢谢
首先,这是一种确实糟糕的数据存储方式。您的 scholars
table 应该只有 year_from
和 year_to
列。
但是,有时我们会被其他人的错误决定所困。您可以使用 MySQL 中的 substring_index()
处理此问题:
where $year between substring_index(range, '-', 1) + 0 and substring_index(range, '-', -1) + 0
+ 0
只是将每个值转换为数字。
不要那样存储数据。理想情况下应该有两列 validity start
和 Validity end
。
Validity Start 应该有所有的有效期开始年份,Validity end 应该有所有的有效期结束年份。
那么查询就很简单了
Select * from scholars_
Where 2017 between validity_start and validity_end
SELECT scholarID FROM scholars_ WHERE $data BETWEEN SUBSTRING_INDEX(SUBSTR(validity,1,4), '-', 1) + 0 AND SUBSTRING_INDEX(SUBSTR(validity,6,9), '-', -1) + 0
$data = 2015 or something