【发布时间】:2018-08-24 09:04:49
【问题描述】:
我有一个问题:在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 York happy new year,您也希望更改它?这将很难单独使用 SQL Server,因为它对正则表达式的支持很弱,这可能是这项工作的最佳工具。 -
仅基于您的示例,这应该有效:
SELECT replace ( name ,'happy happy' ,'happy new') afterreplacename FROM [test].[dbo].[stringrep](编辑:实际上几乎 - 一行中有一个双空格 - 所以它不会被替换) -
创建字符串拆分函数,它返回两列 rownumber 和 string column。执行此操作然后我们继续下一步。rownumber 因为您想用新的替换偶数。
标签: sql-server sql-server-2008 sql-server-2012