删除所有不符合期望值的字符

时间:2018-11-30 07:23:05

标签: sql sql-server

我正在使用SQL Server 2012,但某些值存在问题。我想从字符串中提取一组特定的值(在整个列中),并且只想检索特定的值。

该值为:SS44\\230433\586,其他值为230084android,第三个值为orderno 239578

共同点是所有数字均以23开头,且长度为6个字符。所有其他值都必须从字符串中删除。我尝试了rtrim和一个ltrim,但这没有给我想要的输出。

我不确定如何不用正则表达式。

1 个答案:

答案 0 :(得分:2)

您可以使用PATINDEX查找数字的开头,并使用SUBSTRING获取后6位数字:

declare @Value varchar(50) = 'SS44\\230433\586'
select substring(@Value, patindex('%23%', @Value), 6)

如果您想更仔细地进行搜索,可以使用PATINDEX并检查接下来的4个符号-它们是数字吗?

patindex('%23[0-9][0-9][0-9][0-9]%', @Value)

最终,您可以存储返回的结果并检查是否存在匹配项:

declare @Value varchar(50) = 'SS44\\230433\586'
declare @StartIndex int
set @StartIndex = patindex('%23[0-9][0-9][0-9][0-9]%', @Value)
select IIF(@StartIndex > 0, substring(@Value, @StartIndex, 6), null)