如何评估任何字符串(电子邮件地址 [名称] 字段的第一个组成部分)是否具有等效的电子邮件,后跟非字母数字字符。我该如何说 concat[name] 加上所有可能的非字母数字字符,并查看是否存在或在主表中的电子邮件中或类似。
我的数据(本地表)。
主桌
| Email | id |
| [email protected] | 1234 |
| [email protected] | 1235 |
| [email protected] | 1336 |
| [email protected] | 1237 |
如果您以易于重现的格式提供 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 工具的工作,但也可以在紧要关头发挥作用。您可能需要考虑存储结果而不是一直重新生成它们。