Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL Server中的字符串返回子字符串的查询_Sql_Sql Server_Substring_User Defined Functions - Fatal编程技术网

从SQL Server中的字符串返回子字符串的查询

从SQL Server中的字符串返回子字符串的查询,sql,sql-server,substring,user-defined-functions,Sql,Sql Server,Substring,User Defined Functions,我在Microsoft SQL Server中的标量值函数下有一个名为Sync_CheckData的用户定义函数。它实际做的是检查发出产品的数量和余额数量是否相同。如果出现问题,则返回ErrorStr nvarchar255 输出示例: Balance Stock Error for Product ID : 4 从上面的字符串中,我想得到4,以便稍后我可以使用WHERE子句选择出错的行,其中Product_ID=4 我可以使用哪个SQL函数获取子字符串?试试这个 DECLARE @STR A

我在Microsoft SQL Server中的标量值函数下有一个名为Sync_CheckData的用户定义函数。它实际做的是检查发出产品的数量和余额数量是否相同。如果出现问题,则返回ErrorStr nvarchar255

输出示例:

Balance Stock Error for Product ID : 4
从上面的字符串中,我想得到4,以便稍后我可以使用WHERE子句选择出错的行,其中Product_ID=4

我可以使用哪个SQL函数获取子字符串?

试试这个

DECLARE @STR AS VARCHAR(1000)
SELECT @STR='Balance Stock Error for Product ID : 4'

SELECT substring(@STR,charINDEX(':',@STR)+1,LEN(@STR)-charINDEX(':',@STR)+1)
DECLARE @String VARCHAR(100)

SET @String = 'Balance Stock Error for Product ID : 4'

SELECT RIGHT(@string, CHARINDEX(':', REVERSE(@string))-2)

OR

SELECT RIGHT(@string,(LEN(@string)+1)-PATINDEX('%[0-9]%', @string))
试试这个

DECLARE @STR AS VARCHAR(1000)
SELECT @STR='Balance Stock Error for Product ID : 4'

SELECT substring(@STR,charINDEX(':',@STR)+1,LEN(@STR)-charINDEX(':',@STR)+1)
DECLARE @String VARCHAR(100)

SET @String = 'Balance Stock Error for Product ID : 4'

SELECT RIGHT(@string, CHARINDEX(':', REVERSE(@string))-2)

OR

SELECT RIGHT(@string,(LEN(@string)+1)-PATINDEX('%[0-9]%', @string))
我会用这个权利:

declare @response varchar(100)
set @response = 'Balance Stock Error for Product ID : 4'

select right(@response, len(@response) - charindex(':', @response))
提琴样本:从上面更改而来

我将使用此权限:

declare @response varchar(100)
set @response = 'Balance Stock Error for Product ID : 4'

select right(@response, len(@response) - charindex(':', @response))
提琴样品:从上面改过来试试这个

DECLARE @STR AS VARCHAR(1000)
SELECT @STR='Balance Stock Error for Product ID : 4'

SELECT substring(@STR,charINDEX(':',@STR)+1,LEN(@STR)-charINDEX(':',@STR)+1)
DECLARE @String VARCHAR(100)

SET @String = 'Balance Stock Error for Product ID : 4'

SELECT RIGHT(@string, CHARINDEX(':', REVERSE(@string))-2)

OR

SELECT RIGHT(@string,(LEN(@string)+1)-PATINDEX('%[0-9]%', @string))
试试这个

DECLARE @STR AS VARCHAR(1000)
SELECT @STR='Balance Stock Error for Product ID : 4'

SELECT substring(@STR,charINDEX(':',@STR)+1,LEN(@STR)-charINDEX(':',@STR)+1)
DECLARE @String VARCHAR(100)

SET @String = 'Balance Stock Error for Product ID : 4'

SELECT RIGHT(@string, CHARINDEX(':', REVERSE(@string))-2)

OR

SELECT RIGHT(@string,(LEN(@string)+1)-PATINDEX('%[0-9]%', @string))

它是否总是分号前的最后一位?它是否总是分号前的最后一位?+1-不需要在末尾添加charindex-它将相应地截断。这里有一个小提琴演示:非常感谢你,卓坦!我明白了。+1-不需要在末尾添加charindex-它将相应地截断。这里有一个小提琴演示:非常感谢你,卓坦!我知道了。@user2480596,谢谢!使用RIGHT也可以解决我的问题。@user2480596,谢谢!使用正确的方法也能解决我的问题。