替换与ltrim和rtrim组合的功能



有人能帮我理解以下代码吗:

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
我使用了第一种情况,您可以随意更改
这样更容易理解:

  1. 删除所有尾随空格和前导空格:LTRIM(RTRIM(CompletionDetails))
  2. 将3替换为逗号:REPLACE( ?, '3', ',')
  3. 将其替换为":REPLACE(? , '.', ' ')REPLACE(? , '.', '')

最新更新