有人能帮我理解以下代码吗:
REPLACE(LTRIM(RTRIM(dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ','))), '.', '') AS BuildRequestID,
它是不是说去掉所有的尾随空格和前导空格,然后用逗号替换3。接下来,如果存在.
,是否将其替换为' '
?
它在任何时候都不会用,
替换3
。
我们可以通过格式化完整的表达式来覆盖多行,使所有这些都更容易理解:
REPLACE(
LTRIM(RTRIM(
dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ',')
))
,'.', ''
) AS BuildRequestID,
像这样的表达必须从内而外解读。所以我们从最内部开始:
dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ',')
这个UFN_SEPARATES_COLUMNS()
函数不是SqlServer的一部分,而是由您所在组织的某个人添加的,或者是作为您正在查看的数据库的供应商软件包的一部分添加的。但我相信,根据推断和链接(通过谷歌找到),它会将CompletionDetails
视为分隔文本,其中,分隔符是逗号(基于第三个','
参数),并返回第三个字段(基于第二个3
参数,其中计数从1而不是0开始)。就CSV解析器而言,这个解析器特别幼稚,所以要非常小心你对它的期望
然后,我们使用LTRIM()
和RTRIM()
从字段中删除前导空格和尾随空格不是删除所有空白;只有空格字符。选项卡、换行符等不会被修剪。Sql Server 2017有一个新的TRIM()
函数,它可以处理更宽的字符集,并通过一次调用处理字符串的两侧。
然后,代码使用REPLACE()
函数从结果中删除所有.
字符(用空字符串替换它们)。
代码通过函数dbo.x_COLUMNS
返回的LTRIM()
和RTRIM()
函数修剪前导和尾随空格。。。即CCD_ 17。LTRIM
在左边,RTRIM
在右边。
然后,它通过REPLACE()
函数将所有周期(.
)替换为零。
总之,它删除了字符串中的所有句点以及前导和尾随空格。
LTRIM删除前导空格。RTRIM删除尾部空格。REPLACE删除句点。
Declare @Val Char(20) = ' Frid.ay '
Select REPLACE(
LTRIM(
RTRIM(
@Val --dbo.x_COLUMNS(CompletionDetails, 3, ',')
)
), '.', ''
)
结果
BuildRequestID
--------------
Friday
删除所有尾随空格和前导空格,然后用逗号替换3。接下来,如果有。,将其替换为">
不,它没有这么说
但是这样做:
REPLACE(REPLACE(LTRIM(RTRIM(CompletionDetails)), '3', ','), '.', ' ')
尚不清楚您是希望CCD_ 22替换为CCD_ 23还是CCD_ 24
我使用了第一种情况,您可以随意更改
这样更容易理解:
- 删除所有尾随空格和前导空格:
LTRIM(RTRIM(CompletionDetails))
- 将3替换为逗号:
REPLACE( ?, '3', ',')
- 将其替换为":
REPLACE(? , '.', ' ')
或REPLACE(? , '.', '')