因此,我尝试从该查询的结果集中创建一个固定长度的平面文件,但是在三个名称字段中,我必须删除连字符、撇号、空格、句点、后缀 (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 的许多变体,在每行和括号的内部和外部放置额外字符省略的各种位置,但我无法使语法起作用。
将填充作为您对该列所做的最后一件事;否则,每次替换都会扫描填充空白(并且您将删除添加的空白:
left(REPLACE(REPLACE(REPLACE(lastname , '-', ''), '''', ''), ' ', '') + replicate(' ', 13), 13)
您还可以使用 CAST(.... AS CHAR(13)) 来实现相同的填充,但不确定是否更快或更慢。