查询以从 SQL Server 中的字符串返回子字符串
Posted
技术标签:
【中文标题】查询以从 SQL Server 中的字符串返回子字符串【英文标题】:Query to return substring from string in SQL Server 【发布时间】:2013-06-28 02:55:22 【问题描述】:我在 Microsoft SQL Server 的标量值函数下有一个名为 Sync_CheckData
的用户定义函数。它实际上做的是检查发出的产品数量和余额数量是否相同。如果有问题,返回ErrorStr nvarchar(255)
。
输出示例:
Balance Stock Error for Product ID : 4
从上面的字符串中,我想得到 4,以便稍后我可以使用 WHERE
子句 (WHERE Product_ID = 4
) 选择出现错误的行。
我可以使用哪个 SQL 函数来获取 substring
?
【问题讨论】:
分号前是否总是最后一位? 【参考方案1】:试试这个
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)
【讨论】:
+1 -- 最后不需要添加 charindex -- 它将相应地截断。这是一个小提琴演示:sqlfiddle.com/#!3/d41d8/16396 非常感谢您,tsohtan!我明白了。【参考方案2】:我会为此使用RIGHT
:
declare @response varchar(100)
set @response = 'Balance Stock Error for Product ID : 4'
select right(@response, len(@response) - charindex(':', @response))
小提琴样例:http://sqlfiddle.com/#!3/d41d8/16397(从上面更改)
【讨论】:
@user2480596,谢谢!使用 RIGHT() 也适用于我的问题。【参考方案3】:试试这个
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))
【讨论】:
以上是关于查询以从 SQL Server 中的字符串返回子字符串的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL Server 存储过程转换为 Oracle 过程以从表中查询
如何编写一个查询以从SQL Server中包含类似名称的多个表中获取数据