我需要从字符串中提取子字符串的一部分,如下所示。
YY_12.Yellow
ABC_WSA.Thisone_A
SS_4MON.DHHE_A_A
我需要按照以下提取字符串
Yellow
Thisone
DHHE
答案 0 :(得分:1)
您可以使用以下内容:
declare @tbl table (col nvarchar(100));
insert @tbl values ('YY_12.Yellow'), ('ABC_WSA.Thisone_A'), ('SS_4MON.DHHE_A_A')
select *
, charindex('_', col2, 0)
, left(col2,
case
when charindex('_', col2, 0) - 1 > 0
then charindex('_', col2, 0) - 1
else len(col2)
end) [result]
from (
select col
, substring(col, charindex('.', col, 0) + 1, len(col)) [col2]
from @tbl ) rs
我要留下完整的代码,以便您可以理解我的所作所为。
[col2]
中的SELECT
列)SELECT
,这样我就可以更容易地在第一个SELECT
的结果列上应用新逻辑,我只能将所有内容保留到下划线" _&#34 ; [result]
列答案 1 :(得分:1)
试试这个:
CREATE TABLE app (info varchar(20))
INSERT INTO app VALUES
('YY_12.Yellow'),
('ABC_WSA.Thisone_A'),
('SS_4MON.DHHE_A_A'),
('testnopoint')
SELECT
CASE
WHEN CHARINDEX('.', info) > 0 THEN
CASE
WHEN CHARINDEX('_', info, CHARINDEX('.', info) + 1) > 0 THEN
SUBSTRING(info, CHARINDEX('.', info) + 1, CHARINDEX('_', info, CHARINDEX('.', info) + 1) - CHARINDEX('.', info) - 1)
ELSE
SUBSTRING(info, CHARINDEX('.', info) + 1, LEN(info))
END
END
FROM app
我的查询,如果.
不存在,则返回NULL
,如果要返回所有字符串,请删除CASE
语句
答案 2 :(得分:1)
您还可以尝试使用 SQL Server 2012
中提供的parsename(
)功能
select Name, left(parsename(Name,1),
case when charindex('_', parsename(Name,1)) > 0
then charindex('_', parsename(Name,1))-1
else len(parsename(Name,1))
end) [ExtrectedName] from table
这假设您的字符串中始终有.
来在.
结果:
Name ExtrectedName
YY_12.Yellow Yellow
ABC_WSA.Thisone_A Thisone
SS_4MON.DHHE_A_A DHHE
答案 3 :(得分:1)
试试这个,在这里使用STUFF
SELECT LEFT(STUFF(col,1,CHARINDEX('.',col),''),
CHARINDEX('_',STUFF(col,1,CHARINDEX('.',col),'')+'_')-1
)
FROM @table
输出: -
Yellow
Thisone
DHHE