如果字符串括在引号中,则用 " 或 ' 括起来。我必须删除雪花中的那些开头和结尾的引号



检查以下输入/输出示例:

  1. 输入:""Nag"ndra""->预期输出:"Nag"ndra"
  2. 输入:'N'agendra->预期输出'N'agendra

我尝试了下面的查询来实现该行为,它能够删除起始和结束引号。

select regexp_replace('""Nag"endra""','^["']|["']$','') from dual

对于第二个例子,它被给定为N'agendra,它应该是'N'agendra

如果您想保持起始',那么不要在正则表达式中使用它。这对我有效:

select regexp_replace('""Nag"endra""','^["]|["']$',''); -- "Nag"endra"
select regexp_replace(''N'agendra','^["]|["']$',''); -- 'N'agendra

观察我从^[quot;\']中删除了'

如果正则表达式风格支持对表达式内捕获组的反向引用,则可以匹配字符串开头的分隔符并在末尾引用它,然后替换为第二个捕获组的内容:

SELECT REGEXP_REPLACE( '""Nag"ndra""', '^(["'])(.*)\1$', '$2' );

如果它不支持,但支持替换部件中的反向引用,则可以使用两个调用。例如:

SELECT REGEXP_REPLACE( '""Nag"ndra""', '^"(.*)"$', '$1' );
SELECT REGEXP_REPLACE( ''N'agendra', '^'(.*)'$', '$1' );

您可能需要先测试是否存在匹配的引号对,然后如果您只想在这种情况下删除外部引号对,请选择所需的一个。

编辑如果两者都不支持,则可以使用条件表达式和自己的表达式。你必须首先确保你的起始报价在末尾匹配:

SELECT IF(
'""Nag"ndra""' REGEXP '^".*"$|^'.*'$',
REGEXP_REPLACE( '""Nag"ndra""', '^["']|["']$', '' ), 
'""Nag"ndra""'
);

您可以使用逻辑,分解后查看其工作情况:

SELECT 
column1,
LEFT(column1,1) as first_char,
RIGHT(column1,1) as last_char,
SUBSTR(column1,2, LENGTH(column1)+2) as truncated,
IFF(first_char = last_char AND (first_char = '"' OR first_char = '''), truncated, column1) as cleaned
FROM values ('""Nag"ndra""'), (''N'agendra '); 

给出:

LAST_CHARCLEANED
COLUMN1FIRST_CHARTRUNCATED
"quot;Nag";ndra">">">";Nag";ndra">";Nag";ndra">
'N'agendra

最新更新