如何使用MySQL POSITION函数?

5n0oy7gb  于 2022-11-28  发布在  Mysql
关注(0)|答案(2)|浏览(141)

我正在尝试查找电子邮件列中“@”之前的第一个“a”字符之间的子字符串,
我已经编写了下面的SQL查询,
但是我想我可以用更好的方式来做。

SELECT 
    email,
    CASE
        WHEN
            LENGTH(SUBSTR(email, 0, POSITION('@' IN email))) - LENGTH(REPLACE(SUBSTR(email, 0, POSITION('@' IN email)),
                        'a',
                        '')) > 1
        THEN
            SUBSTR(email,
                POSITION('a' IN email) + 1,
                POSITION('a' IN SUBSTR(email,
                        POSITION('a' IN email) + 1)) - 1)
        ELSE ''
    END AS deelstring
FROM
    persoon

对sql查询的更正

xzv2uavs

xzv2uavs1#

至少有两种方法可以提取子字符串:
1.从起始位置到结束位置提取子字符串,或
1.删除开始/结束位置之前/之后的前缀/后缀
借助@nbk准备的数据,使用第二种方法,这可能对你有用:

select email,
       regexp_replace(email,'^.*a','') as remove_prefix,
       regexp_replace(email,'@.*$','') as remove_suffix,
       regexp_replace(regexp_replace(email,'^.*a',''),'@.*$','') as remove_both
  from persoon;

结果:

email                 |remove_prefix    |remove_suffix|remove_both|
----------------------+-----------------+-------------+-----------+
testa11111111@test.com|11111111@test.com|testa11111111|11111111   |
r7s23pms

r7s23pms2#

您必须测试查询的每个步骤,特别是在您想要撷取零件时。
由于ysth长度只能计算ascii字符,当你检查电子邮件中是否有任何a时,这并不重要,但当提取时,你需要所有字符的长度,甚至非ASCII。
第一个
| 电邮|迪尔斯特朗|
| - -|- -|
| testa11111111@test.com | 十一十一十一十一十一|
| 联系我们|十一月十一日|
fiddle

相关问题