【问题标题】:Replacing first occurrence of character with one character and the second with another character in SQL在 SQL 中用一个字符替换第一次出现的字符,用另一个字符替换第二次出现的字符
【发布时间】:2015-03-11 12:41:59
【问题描述】:

我有一个表,其中的列名称可以包含用引号括起来的子字符串...“substring”... 对于此表中的每一行,我需要将第一次出现的 " 替换为 «,第二个替换为 » 每行只能包含一个带引号的子字符串。

所以如果我有这样的记录'fgh"abc"sdf',我想得到这个'fgh«abc»sdf'

我想不出解决办法。

【问题讨论】:

  • 您使用的是什么关系型数据库?它是否支持正则表达式替换?如果不是(甚至可能)两次通过常规字符串替换操作可能更容易管理。
  • 我使用 MS SQL Server 2012。也许我可以在 PATINDEX 的帮助下做到这一点。谢谢你的建议!
  • 您应该发布一个示例,说明当前的记录是什么样的以及您希望它是什么样的。
  • 如果引号在记录的开头和结尾,则根本不需要正则表达式。只需简单的子字符串即可获取不带引号的文本,然后用您要使用的新引号将其括起来。

标签: sql sql-server regex


【解决方案1】:

首先是语法如何工作的示例

DECLARE @a varchar(max) = 'fgh"abc"sdf'

SELECT 
  stuff(stuff(@a, charindex('"', @a),1, '«'), 
    charindex('"', @a, charindex('"', @a) + 1), 1, '»')

结果:

fgh«abc»sdf 

这是所需的查询,其中 col 是您的列名:

SELECT 
  stuff(stuff(col, charindex('"', col),1, '«'), 
    charindex('"', col, charindex('"', col) + 1), 1, '»')
FROM yourtable

【讨论】:

    【解决方案2】:

    你可以这样做:

    DECLARE @TmpVar VARCHAR(100)
    SET @TmpVar = 'haha"substring"hehe'
    SET @TmpVar = STUFF(@TmpVar, CHARINDEX('"', @TmpVar), 1, '«')
    SET @TmpVar = REPLACE(@TmpVar, '"', '»')
    

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 2011-12-19
      • 1970-01-01
      • 2022-01-13
      • 2012-04-26
      • 2017-10-25
      • 2016-12-19
      • 2018-06-04
      • 2011-08-25
      相关资源
      最近更新 更多