我需要从删除" '和空格的表中选择列,并将其导出到csv文件中。 例如,如果列包含"155/229-230 Moo 10 , 暖禅路" 我将不得不删除引号和结尾引号155/229-230 Moo 10 , 暖禅路
我在努力
SELECT '"SQL Server String Function"'
, substring('"SQL Server String Function"', patindex('%[^"'' ]%','"SQL Server String Function"'), LEN('"SQL Server String Function"')) position;
但它并没有删除结尾引号。
在SQL 2017中引入了TRIM
。
您的代码如下所示:
SELECT TRIM( '"'' ' FROM '"SQL Server String Function"') AS Result
注意:我无权访问SQL 2017来为您提供工作示例。
对于早期版本,它稍微复杂一些(归功于Randi Vertongen(:
DECLARE @pat VARCHAR( 10 )= '%[^''" ]%'
DECLARE @strTbl TABLE( string VARCHAR( 40 ))
INSERT INTO @strTbl VALUES
( '''" SQL Server "String Function "''' ),
( '''" SQL Server "String Function' ),
( 'SQL Server "String Function' ),
( 'SQL Server "String Functio''n' );
SELECT RIGHT( string, LEN( string ) - PATINDEX( @pat, string ) + 1 ) -- Remove leading
FROM
( SELECT LEFT( string, LEN( string ) - PATINDEX( @pat, REVERSE( string )) + 1 ) AS string -- Remove trailing
FROM @strTbl ) AS a;
工作原理:
'%[^''" ]%'
- 正在查找字符串中的第一个非排除字符PATINDEX( @pat, REVERSE( string ))
- 查找最后一个未排除的字符
局限性
由于LEN
函数不计算尾随空格,如果要保留尾随空格,此逻辑将正常工作。