MySQL正则表达式操作
设置 名为mytable的mysql表有一个VARCHAR字段数据 该字段包含以下格式的字符串:MySQL正则表达式操作,mysql,regex,Mysql,Regex,设置 名为mytable的mysql表有一个VARCHAR字段数据 该字段包含以下格式的字符串: name1'value1''name2'value2'' ... nameN''valueN 我知道这个数据是非规范化的-我被迫使用'作为分隔符,因为这是唯一一个不允许作为名称或值的字符 以下是一些示例数据: one'.6332''two'.4231''three'.343''four'.034 two'.4332''four'.033''five'.043 four'.2323''seven'.
name1'value1''name2'value2'' ... nameN''valueN
我知道这个数据是非规范化的-我被迫使用'作为分隔符,因为这是唯一一个不允许作为名称或值的字符
以下是一些示例数据:
one'.6332''two'.4231''three'.343''four'.034
two'.4332''four'.033''five'.043
four'.2323''seven'.3409''nine'.003
问题
我试图根据名称/值对从mytable中选择行。例如,我想选择其数据字段中名称为4且相应值小于.1的所有行。这将返回第1行和第2行
我想一步到位。我意识到我可以对数据进行非规范化,并且很容易用这种方式进行,但我不愿意这样做。这个操作最多只能在500行上执行,所以我并不十分关心它的性能
对于$name和$value输入,我假设解决方案如下所示:
SELECT * FROM mytable WHERE
TO_INT(reg_ex(<crazyregex which selects $name>, data)) < $value
问题是,我不知道具体怎么做
希望有人能帮忙。谢谢 很难看,但我认为它有效:
CREATE TABLE t (d varchar(255));
INSERT INTO t (d) VALUES
("one'.6332''two'.4231''three'.343''four'.034"),
("two'.4332''four'.033''five'.043"),
("four'.2323''seven'.3409''nine'.003"),
("four'.011''five'.043"),
("four'.100''seven'.3409''nine'.003")
;
SELECT
d,
convert(
right(d, length(d) - instr(d, "four'")- 4),
decimal(5,4)
) as v
FROM t
where d regexp "four'.0[0-9]*"
;
在MySQL中,除了返回1或0之外,真的没有其他方法可以执行正则表达式吗?谢谢您的回复!我很惊讶MySQL中没有一个正则表达式函数可以返回匹配项而不是1或0。