如何从包含 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 

我想要实现的是获取 $validityvalidity 列的学者的 scholarID

例如,变量是 $year=2017,我只想 select 具有 2017validity 的那些 scholarIDs。输出应该是这样的:

2016-2019
2016-2020 
2016-2017

类似的,谢谢

首先,这是一种确实糟糕的数据存储方式。您的 scholars table 应该只有 year_fromyear_to 列。

但是,有时我们会被其他人的错误决定所困。您可以使用 MySQL 中的 substring_index() 处理此问题:

where $year between substring_index(range, '-', 1) + 0 and substring_index(range, '-', -1) + 0

+ 0 只是将每个值转换为数字。

不要那样存储数据。理想情况下应该有两列 validity startValidity 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