gpt4 book ai didi

sql-server - 如何在sql server中用新的替换第二个位置字符串

转载 作者:行者123 更新时间:2023-12-03 00:29:37 25 4
gpt4 key购买 nike

我有一个问题:在sql server中,如何将第二次出现的字符串happy替换为字符串new,否则保持原样(相同)。

表:

CREATE TABLE [dbo].[stringrep](
[name] [varchar](100) NULL,
[id] [int] NULL
)
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'happy happy year', 1)
GO
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'very happy new year', 2)
GO
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'happy new year hello', 3)
GO
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'happy happy year', 4)
GO
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'heloo year happy', 5)
GO
INSERT [dbo].[stringrep] ([name], [id]) VALUES (N'happy happy happy year', 6)
GO

根据上述数据,我想要如下输出:

  id  |        Name 
1 | happy new year
2 | very happy new year
3 | happy new year hello
4 | happy new year
5 | heloo year happy
6 |happy new happy year

我尝试了下面的查询:

SELECT replace ( name  ,'happy happy year' ,'happy new year')afterreplacename,
replace ( name, substring ('happy happy year' ,6,6) ,' new')anotherway
,name ,[id]
FROM [test].[dbo].[stringrep]

上面的查询没有给出预期的结果。

请告诉我如何在 sql server 中完成此任务。

最佳答案

我设法提出以下查询。替换逻辑仅针对至少出现两次happy的数据。如果是,那么我们找到第二次出现的 happy 的索引,然后将 new 中的 STUFF 作为替换。

SELECT
data,
CASE WHEN LEN(REPLACE(data, 'happy', '')) < LEN(data) - 6
THEN STUFF(data,
CHARINDEX('happy', data, CHARINDEX('happy', data) + 1),
5,
'new')
ELSE data END AS new_data
FROM yourTable;

enter image description here

Demo

请注意,此解决方案对于字符串中任意位置两次(或多次)出现 happy 是稳健的。请参阅此边缘情况的示例数据的最后一行。

我们宁愿在这里使用正则表达式,也许您的问题可以用一句话来回答。但是,SQL Server 没有良好的 native 正则表达式支持,迫使我们改用基本字符串函数。

关于sql-server - 如何在sql server中用新的替换第二个位置字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com