sql - 模式匹配在 SQL 中,字符出现在任何地方但按顺序排列
问题描述
我正在尝试编写一个查询来修复无效的电子邮件格式。我收到的无效电子邮件格式为first@name_company@com
.
字符始终按'@'
'_'
'@'
该顺序出现。
如果这是格式,那么我将替换@
为.
和_
以@
获得正确的格式:
first.name@company.com
我正在考虑这样的情况:
When @email like '[a-z,0-9,_,-,@]_[a-z,0-9,_,-@]' THEN replace(replace(replace(@email,'@','.'),'_','@'))
如果我将“_”作为这样的通配符,这似乎才有效'[a-z,0-9,_,-,@]%_%[a-z,0-9,_,-@]'
解决方案
我使用您的具体示例找到了两种方法来做到这一点。
create table #myTemp
(someText varchar(50))
insert into #myTemp
values
('first@name_company@com')
select
-- check based on length after replacing the characters with nothing
case when len(someText) - len(replace(replace(someText,'@',''),'_','')) = 3
then replace(replace(someText,'@','.'),'_','@')
end as LengthCheck,
-- check the position of @ to the left and right of _
case when charindex('@',(Right(someText, CHARINDEX('_', reverse(someText))-1))) > 0
and charindex('@',(LEFT(someText, CHARINDEX('_', someText)))) > 0
then replace(replace(someText,'@','.'),'_','@')
end as CharCheck
from #myTemp
推荐阅读
- sql - SQL - 使用另一个表过滤
- swiftui - 如何处理深度嵌套的导航链接
- python - 在点之间填充数据 Matplotlib
- postgresql - 是什么导致使用 asp net core 回滚 postgres 中的更改?
- discord.js - 我无法在另一个文本频道中编辑消息
- python - Plotly:如何更改图例项目名称?
- javascript - 在 for 循环中重新声明 let 和 const
- angular - 如何在 datalables donut highchart 中显示数字
- rust - 在单个项目中使用 main.rs 和 lib.rs,不能在没有 lib 文件夹的库中导入模块
- python - 在返回空白结果的 Pandas 数据框中进行迭代,不确定为什么?