查询以从 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 获取数据

将 SQL Server 存储过程转换为 Oracle 过程以从表中查询

如何编写一个查询以从SQL Server中包含类似名称的多个表中获取数据

如何运行 sql 查询以从不同的 joomla 组件返回数据

R中的直通查询

如何创建“删除按钮以从C#中删除SQL Server数据库中的网格列”?