gpt4 book ai didi

MySQL正则表达式操作

转载 作者:行者123 更新时间:2023-11-29 09:22:41 25 4
gpt4 key购买 nike

设置

名为“mytable”的 mysql 表有一个 VARCHAR 字段“data”。

该字段包含格式为的字符串:

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”中选择行。例如,我想选择数据字段中名称为“four”且相应值小于 0.1 的所有行。 (这应该返回第 1 行和第 2 行)。

我想一步完成此操作。我意识到我可以对数据进行非规范化并且很容易以这种方式做到这一点,但我不想这样做。此操作最多只会发生在 500 行上,因此我不太关心它的性能。

对于输入 $name 和 $value,我假设解决方案如下所示:

SELECT * FROM mytable WHERE 
TO_INT(reg_ex(<crazyregex which selects $name>, data)) < $value

问题是,我不知 Prop 体如何做到这一点。

希望有人能帮忙。谢谢!

最佳答案

丑陋,但我认为它有效:

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正则表达式操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1156717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com