Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL正则表达式操作_Mysql_Regex - Fatal编程技术网

MySQL正则表达式操作

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'.

设置

名为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'.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。