考虑下面的代码;从一个长串中,数字和字母都应该只返回电子邮件(该字符串包含姓名,电话号码,电子邮件等)。
原始字符串可以包含电话号码,电子邮件等,看起来像是相反的:
[falsefalse070-123456789given-name.surname@gmail.comTrueTrue]
我希望最终结果只显示电子邮件地址,如下所示:
[given-name.surname@gmail.com]
第一个case语句删除嵌入在一串数字中的所有“ - ”符号,但不包含嵌入在字符串中的那些符号(即删除“070-123456789”中的“ - ”但不删除“给定名称...” gmail.com”。
第二个case语句删除了字符串的13个第一个位置中可能存在的所有数字。
如果我运行下面的代码,只会考虑第一个case语句。结果是:"070123456789given-name.surname@gmail.com"
。如果我在case语句中更改位置,结果为:"-given-name.surname@gmail.com"
。
“from”-code中的select语句选择变量[user_account]下的电话号码和电子邮件。它工作正常!它是代码的第一部分,带有2个case语句,这是错误的。
如何编写代码以便两个case语句都有效?
SELECT COALESCE(
CASE
WHEN PATINDEX('%[-]%',C.[user_account]) <= patindex('%[ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ]%',C.[user_account]) AND PATINDEX('%[-]%',C.[user_account]) > 0
THEN replace(substring(C.[user_account],PATINDEX('%[-]%',C.[user_account]),1),'-','') + SUBSTRING(C.[user_account],(PATINDEX('%[-]%',C.[user_account])+1),80)
ELSE C.[user_account]
END,
CASE
WHEN SUBSTRING(C.[user_account],1,13) LIKE '%0%' OR SUBSTRING(C.[user_account],1,13) LIKE '%1%' OR SUBSTRING(C.[user_account],1,13) LIKE '%2%' OR SUBSTRING(C.[user_account],1,13) LIKE '%3%' OR SUBSTRING(C.[user_account],1,13) LIKE '%4%' OR SUBSTRING(C.[user_account],1,13) LIKE '%5%' OR SUBSTRING(C.[user_account],1,13) LIKE '%5%' OR SUBSTRING(C.[user_account],1,13) LIKE '%6%' OR SUBSTRING(C.[user_account],1,13) LIKE '%7%' OR SUBSTRING(C.[user_account],1,13) LIKE '%8%' OR SUBSTRING(C.[user_account],1,13) LIKE '%9%' OR SUBSTRING(C.[user_account],1,13) LIKE '% %'
THEN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(C.[user_account],1,13),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9',''),' ','')/*,'-','')*/ + SUBSTRING(C.[user_account],14,80)
ELSE C.[user_account]
END)
AS [user_account]
from
(SELECT
A.username as unit_id
,LEFT(B.string, CHARINDEX('<',B.string)-1) as [Användarnamn]
,REVERSE(LEFT(REVERSE(B.string), CHARINDEX('>', REVERSE(B.string)) -1)) as [user_account]
FROM [statistics].[dbo].[users] A
INNER JOIN (
SELECT
[UserId]
,REPLACE(REPLACE(REPLACE(CAST([PropertyValuesString] as varchar (200)),'False',''),'True',''),'Fals','') as string
FROM [statistics].[dbo].[Profile]) B
ON A.userid=B.userid) C
where unit_id='KN2281'
非常感谢,
干杯!