我必须做一个难以处理的文字。如何动态更改,如下例所示?
示例:/ hello / baby / deneme / / hello2 /
输出:(/ hello /)baby(/ deneme /)(/ hello2 /)
答案 0 :(得分:0)
这是一个非常基本的解决方案,但它适用于你给出的案例(SQL Fiddle here):
SELECT
in_str,
(
-- If the string starts with '/', prepend '('
CASE WHEN in_str LIKE '/%' THEN '(' ELSE '' END
-- Replace / after a space with (/
+ REPLACE(
-- Replace / before by a space with /)
REPLACE( in_str, ' /', ' (/' ),
'/ ', '/) '
)
-- If the string ends with '/', append ')'
+ CASE WHEN in_str LIKE '%/' THEN ')' ELSE '' END
) AS out_str
FROM table1;
如果table1
具有以下in_str
值,则会为您提供相应的out_str
值:
in_str out_str
------------------------ ------------------------------
/one/ two /three/ /four/ (/one/) two (/three/) (/four/)
one /two/ /three/ one (/two/) (/three/)
/one/ /two/ three (/one/) (/two/) three
//one / // two/ / (//one (/) (//) two/) (/)
我已经包含了最后一个来展示一些边缘情况。另请注意,这仅处理/
个字符后紧跟空格或字符串的开头或结尾。不处理其他空格字符,如换行符和制表符。例如,如果您有一个这样的字符串(其中⏎
表示换行符,⇒
表示标签符号):
/one/⇒/two/⏎
/three/⏎
...你得到的输出是:
(/one/⇒/two/⏎
/three/⏎
你可以使用额外的REPLACE
函数处理这些场景,但这是一个你必须自己跳下来的兔子洞。