从一些字符限定的MySQL列中提取多个Text实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从一些字符限定的MySQL列中提取多个Text实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2151字,纯文字阅读大概需要4分钟。
内容图文
![从一些字符限定的MySQL列中提取多个Text实例](/upload/InfoBanner/zyjiaocheng/903/dfe6332aa80d4b61961a1be44be97e39.jpg)
我想从MySQL列中提取某些片段,这些片段以某种独特的方式限制.这是一个例子:
我有下表(TableA):
id | column_a
---+---------
1 | There is a user [u?u=990] and another [u?u=5458855].
2 | And here is just one user [u?u=9390].
3 | And here is nothing.
我希望得到这个:
id | result_a
---+---------
1 | 990
1 | 5458855
2 | 9390
目前我有这个问题:
SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(column_a, '[u?u=', -1), ']', 1) AS result_a FROM TableA
但这给了我:
id | result_a
---+---------
1 | 5458855
2 | 9390
如何改进此查询?
谢谢!
解决方法:
出现此问题的原因是您的架构违反了1NF.
规范化的模式将包含另一个表(看起来非常类似于您尝试获取的结果,可能还有一个额外的“位置”列,用于指示原始源中的预测值)以及现有值中column_a中的值然后,表格不会包含您所追求的数字,而是包含某种占位符.
当然,这是(从某种意义上说)你想要构建的东西……
SQL实际上不太适合从单个源行中提取多个结果:在MySQL中出现的唯一方法是通过JOIN.例如,人们可以尝试从每一行获得两个实例 –
SELECT id, SUBSTRING_INDEX(
SUBSTRING_INDEX(column_a, '[u?u=', -1 - n.v)
, ']', 1) AS result_a
FROM TableA JOIN (
SELECT 0 v
UNION ALL
SELECT 1
) n
当然,这种方法有一些问题:
>它为每一行返回两条记录,这是不正确的 – 这可以通过仅筛选找到的文本与所需模式匹配的那些来解决:
WHERE RIGHT(column_a, 5+CHAR_LENGTH(
SUBSTRING_INDEX(column_a, '[u?u=', -1 - n.v)
)) REGEXP '^\\[u\\?u=.*\\]'
>它要求连接表一直计算到预期实例的最大数量,你说这可能多达100个 – 而不是明确地这样做,这对于如此大的数字来说显然是很麻烦的,一个可以连接多个表来实现乘法,例如使用二进制文件(如果需要,可以将表格n中的128和WHERE过滤器限制为较小的数字):
SELECT id, SUBSTRING_INDEX(
SUBSTRING_INDEX(column_a, '[u?u=', -1 - n.v)
, ']', 1) AS result_a
FROM TableA JOIN (
SELECT b6.v | b5.v | b4.v | b3.v | b2.v | b1.v | b0.v AS v
FROM (
SELECT 0 v UNION ALL SELECT 1<<0
) b0 JOIN (
SELECT 0 v UNION ALL SELECT 1<<1
) b1 JOIN (
SELECT 0 v UNION ALL SELECT 1<<2
) b2 JOIN (
SELECT 0 v UNION ALL SELECT 1<<3
) b3 JOIN (
SELECT 0 v UNION ALL SELECT 1<<4
) b4 JOIN (
SELECT 0 v UNION ALL SELECT 1<<5
) b5 JOIN (
SELECT 0 v UNION ALL SELECT 1<<6
) b6
) n
WHERE RIGHT(column_a, 5+CHAR_LENGTH(
SUBSTRING_INDEX(column_a, '[u?u=', -1 - n.v)
)) REGEXP '^\\[u\\?u=.*\\]'
> MySQL的字符串函数效率不高,而且这种方法非常慢.
内容总结
以上是互联网集市为您收集整理的从一些字符限定的MySQL列中提取多个Text实例全部内容,希望文章能够帮你解决从一些字符限定的MySQL列中提取多个Text实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。