sql - 在混合符号之间获取子字符串
问题描述
我想获得子字符串,我的输出应该看起来像 gmail、outlook、Skype。我的字符串值是
'abc@gmail.com'
'cde.nitish@yahoo.com'
'xyz.vijay@sarvang.com.com'
像这样的东西,你可以看到它的长度可变,带有混合符号“。” 和 '@' 字符串值以表形式存储为列名 Mail_ID 和表名是 tbl_Data
我正在使用 sql server 2012
我使用图表索引来获取子字符串
select SUBSTRING(Mail_ID, CHARINDEX('@',MAil_ID)+1, (CHARINDEX('.',MAil_ID) - (CHARINDEX('@', Mail_ID)+1)))
from tbl_data
我希望我的输出像:
'gmail'
'yahoo'
'sarvang'
请帮助我,我是 sql server 的新手
解决方案
这回答了问题的原始版本。
这可能是最简单的使用case
表达式来检测在 之前是否有句点'@'
:
select (case when email like '%.%@%'
then stuff(left(email, charindex('@', email) - 1), 1, charindex('.', email), '')
else left(email, charindex('@', email) - 1)
end)
from (values ('abc@gmail.com'), ('cde.nitish@yahoo.com'), ('xyz.vijay@sarvang.com.com')) v(email)
推荐阅读
- java - jeprof 的 java 调试符号
- linux - 将程序输出分配给shell脚本中的变量
- android - 布局方向在 ConstraintLayout 中不起作用
- python - 代码格式化,基本温度应用
- gremlin - 如何使用 Gremlin 在 valueMap 中指定要忽略的属性?
- kotlin - Kotlin 获取声明的成员属性值
- java - 我创建了带有标题和持续时间的歌曲类,以及带有 ArrayList 的专辑类,我正在尝试打印列表但在哈希值中给出输出
- reactjs - 如何修改reducer中的现有数据?
- c++ - 在内核级别安全隐藏文件
- recursion - 涂漆 N 个方块和 M 个漆块的独特组合的数量,每个漆块长度为 K 个方块