programing

mariaDB가 {"user":"128"}에서 숫자만 추출합니다.

newstyles 2023. 6. 8. 19:26

mariaDB가 {"user":"128"}에서 숫자만 추출합니다.

문자열에서{"user":"128"}예상외의128.

그럴 수도 있습니다.{"user":"8"}또는{"user":"12"}또는{"user":"128798"}

바이올린 예제에서 일치하는 값은 다음과 같아야 합니다.3

스키마:

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"}');

쿼리:

(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

솔루션: 피들

REGEXP는 regexp가 문자열과 일치하는 경우 0 또는 1을 반환합니다.

'regexp_message' https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr 을 확인해야 합니다.

select REGEXP_SUBSTR(code, '"[0-9]+"') from test2

이것은 당신의 바이올린에서 MySQL 8 버전을 선택한 후에 저에게 효과가 있습니다.반환:

"128"
"2459"
null
"46"

또는

select REGEXP_SUBSTR(code, '[0-9]+') from test2

"k3"에 대해 null 대신 3을 원하는 경우

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)

언급URL : https://stackoverflow.com/questions/69808568/mariadb-extract-only-the-digits-from-user128