Mat*_*lie 5 sql sql-server coding-style
在stackoverflow的这个问题中,接受的答案涉及多次重复相同的代码片段.根据我的经验,许多人努力通过各种方式以各种方式封装代码片段来减少这种情况;
- 可维护性(更改的地方更少)
- 可读性(一次读取代码,然后每次都是"别名")
- 等等
使用链接问题中的代码,您将如何开始减少相同代码片段的重复?或者你会原样离开吗?
(不使用替代逻辑,但坚持使用REPLACE等,只是改变相同逻辑的现状.)
Select Case
When CharIndex('.', Replace(URL, 'www.','')) > 0 then
Left(Replace(URL, 'www.',''), CharIndex('.',Replace(URL, 'www.',''))-1)
Else
Replace(URL, 'www.','')
End as [CleanURL]
From dbo.YourTable
Run Code Online (Sandbox Code Playgroud)
(接受的答案已更改,因此我将代码示例复制到此处.)
编辑
只是为了澄清,我认为我已经引起了混乱.
这不是:
- 如何封装这整段代码以便重复使用?
但它更确切地说:
- 如何减少这段代码中的冗余?
;with cte as
(
select replace(URL, 'www.', '')+'.' as url
from myTable
)
select
left(url, charindex('.', url)-1)
from cte
Run Code Online (Sandbox Code Playgroud)
编辑 1您可以使用执行重复代码的嵌套选择。与使用 cte 并没有什么不同。
Select Case
When CharIndex('.', URL) > 0 then
Left(URL, CharIndex('.',URL)-1)
Else
URL
End as [CleanURL]
From
(select Replace(URL, 'www.','') as URL
from myTable) as T
Run Code Online (Sandbox Code Playgroud)
Edit2删除了重复的 charindex。使用交叉应用
select
case
when c2.idx > 0 then
left(c1.url, c2.idx)
else
c1.url
end
from myTable as m
cross apply (select replace(m.URL, 'www.', '')) as c1(url)
cross apply (select charindex('.', c1.url)) as c2(idx)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |