mariaDB 仅从 {"user":"128"} 中提取数字
mariaDB extract only the digits from {"user":"128"}
来自字符串 {"user":"128"}
,只需要 128
.
也可以是{"user":"8"}
或{"user":"12"}
或{"user":"128798"}
在这个fiddle example中匹配的值应该是3
Schema:
CREATE TABLE test1 (
id INT AUTO_INCREMENT,
userid INT(11),
PRIMARY KEY (id)
);
INSERT INTO test1(userid)
VALUES
('126'),
('2457'),
('3'),
('40');
CREATE TABLE test2 (
id INT AUTO_INCREMENT,
code VARCHAR(1024),
PRIMARY KEY (id)
);
INSERT INTO test2(code)
VALUES
('{"user":"128"}'),
('{"user":"2459"}'),
('{"user":"3"}'),
('{"user":"46"}');
Query:
(SELECT sub.`userid`, rev.`code` REGEXP '[0-9]'
FROM `test1` AS sub, `test2` AS rev
WHERE sub.`userid`= rev.`code`
)
已经尝试 REGEXP '[0-9]'
并且 '[[:digit:]]'
但没有成功。
我也试过concat ('',value * 1) = value
或concat(value * 1) = value
解决方案:fiddle
如果正则表达式匹配字符串,REGEXP 将 return0 或 1。
你应该看看 'regexp_substr'
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr
select REGEXP_SUBSTR(code, '"[0-9]+"') from test2
在您的提琴手中选择 MySQL 8 版本后,这对我有用。
它 returns :
"128"
"2459"
null
"46"
或
select REGEXP_SUBSTR(code, '[0-9]+') from test2
如果您想要 3 而不是“k3”的 null
akina 建议使用 JSON_EXTRACT 更好,但确实需要您将列重新定义为来自 VARCHAR 的 JSON 数据类型。
使用函数REGEXP_SUBSTR:
MariaDB [(none)]> SELECT REGEXP_SUBSTR('{"user":"128"}', '\d+');
+-----------------------------------------+
| REGEXP_SUBSTR('{"user":"128"}', '\d+') |
+-----------------------------------------+
| 128 |
+-----------------------------------------+
1 row in set (0.000 sec)
来自字符串 {"user":"128"}
,只需要 128
.
也可以是{"user":"8"}
或{"user":"12"}
或{"user":"128798"}
在这个fiddle example中匹配的值应该是3
Schema:
CREATE TABLE test1 ( id INT AUTO_INCREMENT, userid INT(11), PRIMARY KEY (id) ); INSERT INTO test1(userid) VALUES ('126'), ('2457'), ('3'), ('40'); CREATE TABLE test2 ( id INT AUTO_INCREMENT, code VARCHAR(1024), PRIMARY KEY (id) ); INSERT INTO test2(code) VALUES ('{"user":"128"}'), ('{"user":"2459"}'), ('{"user":"3"}'), ('{"user":"46"}');
Query:
(SELECT sub.`userid`, rev.`code` REGEXP '[0-9]' FROM `test1` AS sub, `test2` AS rev WHERE sub.`userid`= rev.`code` )
已经尝试 REGEXP '[0-9]'
并且 '[[:digit:]]'
但没有成功。
我也试过concat ('',value * 1) = value
或concat(value * 1) = value
解决方案:fiddle
如果正则表达式匹配字符串,REGEXP 将 return0 或 1。
你应该看看 'regexp_substr' https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr
select REGEXP_SUBSTR(code, '"[0-9]+"') from test2
在您的提琴手中选择 MySQL 8 版本后,这对我有用。 它 returns :
"128"
"2459"
null
"46"
或
select REGEXP_SUBSTR(code, '[0-9]+') from test2
如果您想要 3 而不是“k3”的 null
akina 建议使用 JSON_EXTRACT 更好,但确实需要您将列重新定义为来自 VARCHAR 的 JSON 数据类型。
使用函数REGEXP_SUBSTR:
MariaDB [(none)]> SELECT REGEXP_SUBSTR('{"user":"128"}', '\d+');
+-----------------------------------------+
| REGEXP_SUBSTR('{"user":"128"}', '\d+') |
+-----------------------------------------+
| 128 |
+-----------------------------------------+
1 row in set (0.000 sec)