我有下面的声明,在Tableau很好地工作。
但是,我希望将其转换为SQL,并将所有结果保存为临时列名。
有人知道我会怎么做吗?
本质上,下面删除了..net等.来自域名。
然后,我有另一个脚本来移除子域(从第一个域开始的所有内容)。在结果值的左边)。
如果有人能帮我解决这些问题,那就太不可思议了,因为我不知道如何在SQL中实现这一点。
IF CONTAINS([domain], ".co.uk") then LEFT([domain],LEN([domain])-6)
elseif CONTAINS([domain], ".com") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".net") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".org") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".biz") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".edu") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".ac") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".gov") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".biz") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".co") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".ca") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".io") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".in") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".it") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".uk") then LEFT([domain],LEN([domain])- 3)
elseif CONTAINS([domain], ".ru") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".ie") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".tv") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".info") then LEFT([domain],LEN([domain])-5)
elseif CONTAINS([domain], ".fr") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".es") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".pl") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".is") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".hu") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".xxx") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".nl") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".ro") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".xyz") then LEFT([domain],LEN([domain])-4)
elseif CONTAINS([domain], ".no") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".eu") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".me") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".cz") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".fi") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".nl") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".al") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".am") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".af") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".st") then LEFT([domain],LEN([domain])-3)
elseif CONTAINS([domain], ".cn") then LEFT([domain],LEN([domain])-3)
else [domain]
end发布于 2017-03-31 13:40:11
它非常类似于您现在拥有的内容,但是使用like而不是contains:
IF domain like '%.co.uk' THEN left(domain,len(domain)-6)
IF domain like '%.com' THEN left(domain,len(domain)-4)
...
ELSE domain END AS stripped_domain发布于 2017-03-31 13:59:43
如果SQL Server,可能是这样的
Declare @YourTable table (domain varchar(100))
Insert Into @YourTable values
('somedomain.org'),
('somedomain.net'),
('anotherdomain.az'),
('nodomain'),
('somedomain.com?Param=1')
Select A.*
,NoDomain = left(domain,len(domain)-charindex('.',reverse(domain)))
From @YourTable A返回
domain NoDomain
somedomain.org somedomain
somedomain.net somedomain
anotherdomain.az anotherdomain
nodomain nodomain
somedomain.com?Param=1 somedomain发布于 2017-03-31 13:51:24
如果可以用例,则...意味着必须正确地对代码进行寻址。
select CASE domain
WHEN domain like "%.co.uk" THEN LEFT(domain,LENGTH(domain)-6)
WHEN domain LIKE "%. com" THEN LEFT(domain,LENGTH(domain)-4)
WHEN domain LIKE "%. net" THEN LEFT(domain,LENGTH(domain)-4)
.....
WHEN domain LIKE "%.co" THEN LEFT(domain,LENGTH(domain)-3)
WHEN domain LIKE "%.ca" THEN LEFT(domain,LENGTH(domain)-3)
....
END
FROM MY_TABLEhttps://stackoverflow.com/questions/43142072
复制相似问题