从第二次出现获取值

问题描述

我在 sql Server 中有一个问题。

如何从 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];

为了解释一下,上面的内容从名称的子字符串开始,从 第二个 下划线开始。

,

几个 CHARINDEXSTUFF 在这里运行良好:

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);