MySQL从文本列选择过滤

时间:2018-11-08 09:54:36

标签: mysql sql regex

我想查询一个MySQL 5数据库。

假设数据库名称为db,表名称为table,列名称为column

该列为text

包含以下示例:

aksksksksjsjk&ct=100&rxp=0918&rpa=100
aksksksksjsjk&ct=100&rxp=1018&ls=1

所以我只想在rxp > 0918

的地方查询该表和grep

所以我希望结果是:

aksksksksjsjk&ct=100&rxp=1018&ls=1

我尝试了SELECT column FROM db.table WHERE column LIKE '%rxp=1018%',它正在工作!但这意味着我将需要手动插入所有日期!

2 个答案:

答案 0 :(得分:2)

假设rxp=之后的值的长度始终为4,格式为MMYY,那么以下内容将为您解决问题。请注意,由于您的日期是字符串格式,因此我们需要分别检查月份和年份。

SELECT *
FROM db.table
WHERE LEFT(SUBSTRING_INDEX(testColumn, 'rxp=', -1), 2)  > '09' 
    AND MID(SUBSTRING_INDEX(testColumn, 'rxp=', -1), 3, 2)  >= '18'

假设您在column下具有以下值:

aksksksksjsjk&ct=100&rxp=0918&rpa=100
aksksksksjsjk&ct=100&rxp=1018&ls=1
aksksksksjsjk&ct=100&rxp=1116&ls=1

查询的输出应为

aksksksksjsjk&ct=100&rxp=1018&ls=1

但是,我强烈建议您规范化表并将每个值存储在单独的列中(ctrxprpals等)将大量信息合并为一个字符串的过程。

答案 1 :(得分:0)

create table #temp(
Integ Integer
 )
insert into #temp values(CONVERT(INT, right(left('aksksksksjsjk&ct=100&rxp=0918&rpa=100', 29),4)) ) ,
                        (CONVERT(INT, right(left('aksksksksjsjk&ct=100&rxp=1018&ls=1', 29),4)) ) 
select * from #temp
where Integ >918
drop table #temp

希望对您有帮助