[英]Mysql multiple maching patterns in substring_index
我可以使用case
东西在substring_index
给出多个匹配模式吗?
更具体地说,在我的情况下,我可以根据他们的ascii匹配一组字符吗?
添加一些示例:
中文Q100
中文T800
中文中文K999
字符串以一些汉字开头,然后是一些数字或拉丁字母,我想要的是将字符串分成两部分:一部分包含汉字(从最左边到第一个西部字母),另一部分来自第一部分最西边的西方信件。
像这些:
中文, Q100
中文, T800
中文中文, K999
有多种方法可以解决问题。 从最右边开始,我会给你3个。
使用应用程序
你的问题是关于 - 用正则表达式替换。 而且MySQL的支持很弱(准确地说,没有人支持用正则表达式替换)。 因此,您可以这样做:选择整个记录,然后使用a-zA-Z0-9
掩码将其拆分为应用程序。
或者可能是改变表结构?
那么,替代方案是:您可能应该将此数据分成2列吗? 如果您打算使用单独的数据部分,那么可能是更改数据库体系结构的标志吗?
第二种方式是使用MySQL。 要做到这一点 - 是的,你将使用REPLACE()
。 例如,要删除所有字母数字符号,您将执行以下操作:
SELECT [...REPLACE(REPLACE(str, 'z', ''), 'y', '')...]
这是一个伪SQL,因为发布整个26 + 26 + 10个REPLACE
实例会很疯狂(但是,使用它也很疯狂)。 但这当然会解决你的问题。
这是第三种方式,它有两个子类。 您可以使用UDF或存储的例程。
使用UDF
有第三方库提供正则表达式替换功能。 然后,您需要做的就是将这些库包含到您的服务器构建中。 示例: lib_mysqludf_preg但是,这将需要其他操作才能使用这些库。
使用存储的例程
那么,您可以使用存储的例程来创建自己的替换函数。 实际上,我已经编写了这样的库,它叫做mysql-regexp
,它提供了REGEXP_REPLACE()
函数,它允许你用正则表达式替换字符串。 它没有经过充分测试,所以如果您决定使用它 - 请自行承担风险。 样本将是:
mysql> SELECT REGEXP_REPLACE('foo bar34 b103az 98feo', '[^a-z]', '');
+--------------------------------------------------------+
| REGEXP_REPLACE('foo bar34 b103az 98feo', '[^a-z]', '') |
+--------------------------------------------------------+
| foobarbazfeo |
+--------------------------------------------------------+
1 row in set (0.00 sec)
由于它完全使用存储代码编写,因此您无需重新构建服务器或其他任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.