【发布时间】:2012-08-19 02:56:31
【问题描述】:
我在 MySQL 数据库中有一个字段,其中包含所购产品的项目描述。其中一些是简单的英语描述,另一些是零件编号,还有一些仍然是零件编号,后跟描述。我已经使用 replace() 从字符串中删除了所有空格和破折号。
数据如下所示:
1938420985390asdfih
1234812934810dflkasd
asdfasldkjfaasdfjasd
asd;flkjaklsdf
adfsdf1234073927357sdapjfas
1/4sdikhsd
我想回来:
1938420985390
1234812934810
(null)
(null)
1234073927357
(null)
我真正需要的是编写一个返回 13 位零件号的 SQL,而不是额外的字母/字符。我希望它也返回实际数字,而不是匹配/不匹配的 1 或 0。
我尝试使用 REGEXP 函数(有人建议 regexp ('\d{13}') 或 regexp ('\p{13}'),但这些都不起作用。[这些返回 0 或 1,而不是匹配的字符串部分。]有什么建议吗?
谢谢!
【问题讨论】:
-
你能定义这些正则表达式是如何不起作用的吗?有错误吗?结果返回时是否没有错误但为空?
-
@Corey:我很确定 OP 的意思是 REGEXP 表达式返回 1 或 0,而不是返回与模式匹配的值部分。 (MySQL 没有内置函数来返回匹配的字符串。)
-
@CoreyOgburn: spencer 是正确的......问题是它会返回 1 或 0。然后我可以使用唯一 ID 链接回列值,但想法是尝试将零件编号与另一个数据集匹配。我也可以对其他数据集执行此操作: concat("or item_desc like '%", part_number, "%'") 然后以这种方式运行大量查询,但这将花费很长时间......更不用说其他数据集并不详尽。
标签: mysql regex string substring