替换结果集中单列中的多个字符

问题描述 投票:0回答:1

因此,我尝试从该查询的结果集中创建一个固定长度的平面文件,但是在三个名称字段中,我必须删除连字符、撇号、空格、句点、后缀 (Jr) 或前缀 (Dr)。被剥离的字符必须完全删除,不能用空白替换,但每列宽度必须保持相同。例如,姓氏的最大长度为 13 个字符:

姓氏:麦当劳-奥利里 应返回为:McDonaldOLear

这是我到目前为止所拥有的,到目前为止我唯一能够替换的是单个字符,连字符......

SELECT
REPLACE(idNum, '-', '') +
'ABC' +
'123' +
REPLACE(left(lastname + replicate(' ', 13), 13), '-', '') +
REPLACE(left(firstName + replicate(' ', 10), 10), '-', '') +
REPLACE(left(middleName + replicate(' ', 7), 7), '-', '') +
REPLACE(CONVERT(CHAR(10), dateField, 101),'/','') +
'                                    ' +
replace(left(CLNum + replicate(' ', 6), 6), '''', '') +
replace(left(UID + replicate(' ', 8), 8), '''', '') +
'                    ' +
'DEFG' +
'000'
from TableName
where CLNum = '1234'
and ISNULL(dateField, '') <> ''

我尝试了 REPLACE 的许多变体,在每行和括号的内部和外部放置额外字符省略的各种位置,但我无法使语法起作用。

sql select replace sql-server-2016 replicate
1个回答
0
投票

将填充作为您对该列所做的最后一件事;否则,每次替换都会扫描填充空白(并且您将删除添加的空白:

left(REPLACE(REPLACE(REPLACE(lastname , '-', ''), '''', ''), ' ', '') + replicate(' ', 13), 13)

您还可以使用 CAST(.... AS CHAR(13)) 来实现相同的填充,但不确定是否更快或更慢。

© www.soinside.com 2019 - 2024. All rights reserved.