如何添加子字符串下面的字符串的代碼?
我需要variableID
中的questionID
,即兩個下劃線(_)之間的任何內容。 例子:子串以下字符串
hcm_q10_568
py_q10x_45
sub_q1_34
la_q8a_67
我有這樣的代碼來爲特定風格的字符串工作,但不能滿足所有:
(substring(@s,charindex('q'',@s),charindex('_',reverse(@s))))
你能給我一些想法嗎?如何讓所有的字符串工作。
如何添加子字符串下面的字符串的代碼?
我需要variableID
中的questionID
,即兩個下劃線(_)之間的任何內容。 例子:子串以下字符串
hcm_q10_568
py_q10x_45
sub_q1_34
la_q8a_67
我有這樣的代碼來爲特定風格的字符串工作,但不能滿足所有:
(substring(@s,charindex('q'',@s),charindex('_',reverse(@s))))
你能給我一些想法嗎?如何讓所有的字符串工作。
使用parsename()
(如果在弦無期):
select
middle = parsename(replace(str,'_','.'),2)
from t
rextester演示:http://rextester.com/LWNP30293
回報:
+--------+
| middle |
+--------+
| q10 |
| q10x |
| q1 |
| q8a |
+--------+
對於週期字符串,可以使用臨時替換角色並將其交換出來並返回N:
select
middle = replace(parsename(replace(replace(str,'.',char(29)),'_','.'),2),char(29),'.')
from t
參考:
如果你真的想用substring()
和charindex()
你可以像這樣:
select
middle=substring(str
,(charindex('_',str)+1)
,(charindex('_',str,(charindex('_',str)+1))-charindex('_',str)-1)
)
from t
使用CHARINDEX。 Terse,但萬無一失。
declare @input varchar(50)
declare @index1 int, @index2 int
declare @result varchar(50)
select @input = 'my_string_here';
select @index1=CHARINDEX('_', @input, 1)
if (@index1 > 0)
begin
select @index2 = CHARINDEX('_', @input, @index1+1)
if (@index2 > 0)
select @result = SUBSTRING(@input, @index1+1, @[email protected])
end
print @result
看在CHARINDEX可選的第三個參數,看看有沒有不給你一個想法:https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex- transact-sql –