将 '%[^a-z0-9 .]%' 连接到字符串并比较字符串的各个部分?

问题描述 投票:0回答:1

如何评估任何字符串(电子邮件地址 [名称] 字段的第一个组成部分)是否具有等效的电子邮件,后跟非字母数字字符。我该如何说 concat[name] 加上所有可能的非字母数字字符,并查看是否存在或在主表中的电子邮件中或类似。

我的数据(本地表)。

电子邮件 电子邮件_id 名字 域名
[电子邮件受保护] 1234 你好世界 gmail com
[电子邮件受保护] 678 乔恩·史密斯二世 教育

主桌

| Email | id  | 
|  [email protected]  | 1234  | 
|  [email protected]  | 1235  | 
|  [email protected]  | 1336  | 
|  [email protected]  | 1237  | 
sql sql-server string email concatenation
1个回答
0
投票

如果您以易于重现的格式提供 DDL/DML,这真的很有帮助。

DECLARE @Emails TABLE (Email NVARCHAR(100), EmailID INT);
INSERT INTO @Emails (Email, EmailID) VALUES
('[email protected]', 1234),('[email protected]', 1235), ('[email protected]', 1236), ('[email protected]', 6780);

SELECT e.Email, e.EmailID, CASE WHEN PATINDEX('%[A-Z|a-z|0-9]@%', e.Email) > 0 THEN 1 ELSE 0 END AS AlpaNumericBeforeAt, LEFT(e.Email,CHARINDEX('@',e.Email)-1) AS UserName,
       SUBSTRING(e.Email,CHARINDEX('@',e.Email)+1,LEN(e.Email)-(CHARINDEX('@',e.Email)+CHARINDEX('.',REVERSE(e.Email)))) AS Domain, 
       REVERSE(LEFT(REVERSE(e.Email),CHARINDEX('.',REVERSE(e.Email))-1)) AS Extenstion
  FROM @Emails e;
电子邮件 邮箱ID AlpaNumericBeforeAt 用户名 域名 扩展
[电子邮件受保护] 1234 1 你好世界 gmail.但不是 com
[电子邮件受保护] 1235 1 你好世界 gmail com
[电子邮件受保护] 1236 0 你好世界+ gmail com
[电子邮件受保护] 6780 1 乔恩·史密斯二世 教育

这里我们使用字符串操作函数

LEFT
SUBSTRING
PATINDEX
REVERSE
CHARINDEX
对电子邮件进行切片和切块。 https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver16.

我假设 A-Z a-z 和 0-9 涵盖了您想要的字母数字范围。

这可能是您最喜欢的 ETL 工具的工作,但也可以在紧要关头发挥作用。您可能需要考虑存储结果而不是一直重新生成它们。

© www.soinside.com 2019 - 2024. All rights reserved.