正则表达式从列中删除" ' 和空格



我需要从删除" '和空格的表中选择列,并将其导出到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函数不计算尾随空格,如果要保留尾随空格,此逻辑将正常工作。

相关内容

  • 没有找到相关文章

最新更新