sql - 我想在 SQL Server 中获取 @ 之前和任何其他特殊字符或空格之后的字符串
问题描述
我想在 SQL 服务器中拆分字符串并获取 @ 之前和任何其他特殊字符之后的值。
Example 1: I have a string
abc.123.vet@xyz.com
Expected output: vet
Example 2: aaa@yy.com
Expected output: aaa
Example 3: aaa bte@yy.com
Expected output: bte
我努力了:
代码片段#1:
DECLARE @email VARCHAR(100)
SET @email = 'firstname.lastname@email.com'
SELECT SUBSTRING(@email, 0, CHARINDEX('@', @email))
代码片段#2:
DECLARE @emai1l VARCHAR(100)
SET @emai1l = 'first.name.lastname@email.com'
SELECT SUBSTRING(SUBSTRING(@emai1l, 0, CHARINDEX('@', @emai1l)), 0, CHARINDEX('.', @emai1l))
解决方案
SQL Server 不是这种类型的字符串操作的最佳选择。但是,这是一种方法:
select t.str, v.str,
right(v.str,
patindex('%[, .]%', reverse(v.str) + ' ') - 1
) as result
from (values ('abc.123.vet@xyz.com'), ('aaa@yy.com'), ('aaa bte@yy.com')
) t(str) cross apply
(values (left(t.str, charindex('@', t.str) - 1))
) v(str) ;
这是一个 db<>fiddle。
推荐阅读
- javascript - 一键触发多个事件 - 写入数据库并呈现 HTML
- xampp - 如何在 xampp 中更改和保存我的服务和端口设置
- reactjs - 如何使用 React 创建历史日志?
- java - 套接字多线程编程 DataInputStream.available() = 0 而输出流正确写入
- node.js - Npm install 使用 docker buildx linux/arm64 失败
- c# - Azure 上的 Blazor Server App:AuthenticationException:根据验证过程,远程证书无效
- javascript - 在 contenteditable 中结束编辑返回键
- flutter - Dart/Flutter 错误:“AuthSession”类型的值不能分配给“CognitoAuthSession”类型的变量
- ldap - 防止用户多次更改密码 - openldap
- node.js - R3InjectorError(AppServerModule) 没有 InjectionToken compilerOptions 的提供者