如何在两个字符之间选择数据

时间:2015-02-02 08:07:31

标签: sql-server sql-server-2008 tsql

想要从字符串中选择数据,该数据始终以*符号开头,以*|结尾。例如,它必须适用于两个字符串:232323*123456*123512232323*123456|123512

我尝试像这样解析:

declare @s varchar(max) = '232323*123456*123512'
select parsename(replace(@s, '*', '.'), 2)

但这只适用于232323*123456*123512。 需要解析器,它也适用于'232323*123456|123512'。 响应必须是两个字符串:123456

3 个答案:

答案 0 :(得分:1)

在现有Replace之上使用其他replace,将这两个符号替换为'.'

DECLARE @S VARCHAR(MAX) = '232323*123456|123512'

SELECT Parsename(Replace(Replace(@S, '*', '.'), '|', '.'), 2) --123456

更新以处理..替换为任何其他符号进行解析然后最后用.

替换符号
SELECT replace(Parsename(Replace(Replace(replace(@S,'.','~'), '*', '.'), '|', '.'), 2),'~','.') --12.34.56

答案 1 :(得分:1)

您可以尝试替换'*'和'|':

declare @s varchar(max) = '232323*123456|123512'
select parsename(replace(replace(@s, '|', '.'), '*', '.'), 2)

答案 2 :(得分:0)

这样做的一种方法是:

declare @s varchar(max) = '232323*123456|123512'

首先替换所有字符以使其具有相同的分隔符:

SET @s = REPLACE(@s, '|', '*')

然后在第一次出现*和下次出现*之间选择子字符串

SELECT SUBSTRING(@s, CHARINDEX('*', @s) + 1, CHARINDEX('*', @s, CHARINDEX('*', @s) + 1) - CHARINDEX('*', @s) - 1)