我正在尝试查找电子邮件列中“@”之前的第一个“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查询的更正
2条答案
按热度按时间xzv2uavs1#
至少有两种方法可以提取子字符串:
1.从起始位置到结束位置提取子字符串,或
1.删除开始/结束位置之前/之后的前缀/后缀
借助@nbk准备的数据,使用第二种方法,这可能对你有用:
结果:
r7s23pms2#
您必须测试查询的每个步骤,特别是在您想要撷取零件时。
由于ysth长度只能计算ascii字符,当你检查电子邮件中是否有任何
a
时,这并不重要,但当提取时,你需要所有字符的长度,甚至非ASCII。第一个
| 电邮|迪尔斯特朗|
| - -|- -|
| testa11111111@test.com | 十一十一十一十一十一|
| 联系我们|十一月十一日|
fiddle