问题描述
如何从 sql Server 中的 _
符号中获取第二次出现的值。
表:Product_details
CREATE TABLE [dbo].[product_details](
[name] [varchar](500) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[product_details] ([name]) VALUES (N'abc_xyz_pen')
INSERT [dbo].[product_details] ([name]) VALUES (N'def_rav_pen_two')
INSERT [dbo].[product_details] ([name]) VALUES (N'ade_rav_ted_ted_pen')
INSERT [dbo].[product_details] ([name]) VALUES (N'te_ty_te_de_rd_te')
基于上表,我想要如下输出
姓名 |
---|
笔 |
pen_two |
ted_ted_pen |
te_de_rd_te |
我试过如下
select substring(name,charindex('_',name,1),len(name))
from product_details
以上查询未给出准确结果。
解决方法
您可以使用:
SELECT
name,SUBSTRING(name,CHARINDEX('_',name,name) + 1) + 1,LEN(name)) AS second
FROM [dbo].[product_details];
为了解释一下,上面的内容从名称的子字符串开始,从 第二个 下划线开始。
,几个 CHARINDEX
和 STUFF
在这里运行良好:
SELECT STUFF(pd.[name],1,CI2.I,'')
FROM dbo.product_details pd
CROSS APPLY (VALUES(CHARINDEX('_',pd.[name])))CI1(I)
CROSS APPLY (VALUES(CHARINDEX('_',pd.[name],CI1.I+1)))CI2(I);