考虑下表:
MyValue
--------------------
123
122_DELETED
45670
42425
43_NO_VIEW
4365463_CORRUPT
53
4335_NO_VIEW_ALLOWED
我试图只获得返回的数字。换句话说:在第一个下划线(_
)之后输入所有内容:
select
left(MyValue, charindex(('_', MyValue)-1)
from
DB.Table
但是,这会返回错误Invalid length parameter passed to the LEFT or SUBSTRING function.
我认为这是因为如果当前值没有下划线(例如,NULL
),则值为123
。
我如何解释此例外情况?非常感谢任何帮助。
我在SQL Server 2008上。
答案 0 :(得分:3)
select SUBSTRING(MyValue,CHARINDEX('_',MyValue)+1,LEN(MyValue)) from DB.Table
答案 1 :(得分:3)
试试这个
select
case when MyValue is null then '' --if null return empty string
when charindex('_', MyValue) > 0 then
left(MyValue, charindex('_', MyValue)-1)
else
MyValue --Return the field value if an underscore is not present
end as Result
from
DB.Table
答案 2 :(得分:3)
试试这个!
select myval,case when myval like '%[_]%' then
substring(myval,1,patindex('%[_]%',myval)-1) else myval end from t
答案 3 :(得分:1)
试试这个:
declare @st varchar(20)
set @st ='4365463_CORRU'
select @st, SUBSTRING(@st,CHARINDEX('_',@st)-LEN(@st),LEN(@st))
答案 4 :(得分:1)
检查一下。
declare @t table (myvalue varchar(50))
insert into @t
values ( '123'),('122_DELETED'),('45670'),('42425'),('43_NO_VIEW'),('4365463_CORRUPT'),('53'),('4335_NO_VIEW_ALLOWED')
select * from @t
;With cte as
(
select CHARINDEX( '_', myvalue)+1 d , myvalue from @t
)
select SUBSTRING(myvalue,d,LEN(myvalue) ) from cte