SQL Server中的意外输出

时间:2019-03-12 14:26:35

标签: sql-server

我有一个字符串,我需要在方括号中输入字符

declare  @String Varchar(50)
Set @String ='C910-C916[02]'

Select 
    Substring(Rtrim(Ltrim(@String)), CHARINDEX('[', Rtrim(Ltrim(@string))) + 1, (len(@string) - 1)) val3  

输出:

vol3
02]

但是预期输出是

 vol3
 02

此查询出了什么问题?

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

DECLARE @String VARCHAR(50)
SET @String ='C910-C916[02]'

-- output: 02
SELECT SUBSTRING(RTRIM(LTRIM(@String)), CHARINDEX('[', RTRIM(LTRIM(@String))) + 1, CHARINDEX(']', RTRIM(LTRIM(@String))) - CHARINDEX('[', RTRIM(LTRIM(@String)))-1) val3  

使用此解决方案,您还可以在文本中间获得数字:

DECLARE @String VARCHAR(50)
SET @String ='C910-C916[02] Hello World'

-- output: 02
SELECT SUBSTRING(RTRIM(LTRIM(@String)), CHARINDEX('[', RTRIM(LTRIM(@String))) + 1, CHARINDEX(']', RTRIM(LTRIM(@String))) - CHARINDEX('[', RTRIM(LTRIM(@String)))-1) val3  

答案 1 :(得分:1)

您也可以这样做:

SELECT PARSENAME(REPLACE(@String,'[','.['),1);