gpt4 book ai didi

mysql - 从不规则格式的字符串中间返回数字

转载 作者:行者123 更新时间:2023-11-30 23:28:09 25 4
gpt4 key购买 nike

我在 MySQL 数据库中有一个字段,其中包含所购买产品的项目描述。其中一些是简单的英语描述,另一些是零件号,还有一些仍然是零件号后跟描述。我已经使用 replace() 删除了字符串中的所有空格和破折号。

data looks like this:

1938420985390asdfih
1234812934810dflkasd
asdfasldkjfaasdfjasd
asd;flkjaklsdf
adfsdf1234073927357sdapjfas
1/4sdikhsd

and I would like to return:

1938420985390
1234812934810
(null)
(null)
1234073927357
(null)

我真正需要的是编写一个 SQL 来返回 13 位零件号,而不是额外的字母/字符。我更希望它也返回实际数字,而不是 1 或 0 表示匹配/不匹配。

我尝试使用 REGEXP 函数(有人建议 regexp ('\d{13}')regexp ('\p{13}') 但这些都没有没用。[这些返回 0 或 1,而不是匹配的字符串部分。]有什么建议吗?

谢谢!

最佳答案

这是 MySQL 中的一项重要任务,没有用于返回正则表达式匹配的内置函数。但是因为你正在寻找恰好 13 位数字,你可以做这样的事情(显然将它扩展到你需要检查的位置数......

-- setup test
CREATE TABLE t (foo VARCHAR(30));
INSERT INTO t VALUES
('1938420985390asdfih')
,('1234812934810dflkasd')
,('asdfasldkjfaasdfjasd')
,('asd;flkjaklsdf')
,('adfsdf1234073927357sdapjfas')
,('1/4sdikhsd')


SELECT CASE
WHEN SUBSTR(foo,1,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,1,13)
WHEN SUBSTR(foo,2,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,2,13)
WHEN SUBSTR(foo,3,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,3,13)
WHEN SUBSTR(foo,4,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,4,13)
WHEN SUBSTR(foo,5,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,5,13)
WHEN SUBSTR(foo,6,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,6,13)
WHEN SUBSTR(foo,7,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,7,13)
WHEN SUBSTR(foo,8,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,8,13)
WHEN SUBSTR(foo,9,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,9,13)
END AS digits
FROM t

-------------------
1938420985390
1234812934810
(NULL)
(NULL)
1234073927357
(NULL)

不,它不漂亮。但是您应该能够扩展它以有效地“扫描”合理长度的字符串。

注意:正则表达式检查整个 13 个字符的子字符串是否正好由 13 个字符组成,每个字符都是一个十进制数字(0 到 9)。

关于mysql - 从不规则格式的字符串中间返回数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094232/

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