如何select两个字符之间的数据
How to select data between two characters
想要来自始终以 *
符号开头并以 *
或 |
结尾的字符串中的 select 数据。例如,它必须适用于两个字符串:232323*123456*123512
和 232323*123456|123512
.
我尝试这样解析:
declare @s varchar(max) = '232323*123456*123512'
select parsename(replace(@s, '*', '.'), 2)
但是这个只适用于 232323*123456*123512
。
需要也可以与 '232323*123456|123512'
一起使用的解析器。
响应必须针对两个字符串:123456
.
在现有 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
一种方法是:
declare @s varchar(max) = '232323*123456|123512'
首先替换所有字符以具有相同的分隔符:
SET @s = REPLACE(@s, '|', '*')
然后 select 在第一次出现的 *
和下一次出现的 *
之间的子串
SELECT SUBSTRING(@s, CHARINDEX('*', @s) + 1, CHARINDEX('*', @s, CHARINDEX('*', @s) + 1) - CHARINDEX('*', @s) - 1)
您可以尝试同时替换“*”和“|”:
declare @s varchar(max) = '232323*123456|123512'
select parsename(replace(replace(@s, '|', '.'), '*', '.'), 2)
想要来自始终以 *
符号开头并以 *
或 |
结尾的字符串中的 select 数据。例如,它必须适用于两个字符串:232323*123456*123512
和 232323*123456|123512
.
我尝试这样解析:
declare @s varchar(max) = '232323*123456*123512'
select parsename(replace(@s, '*', '.'), 2)
但是这个只适用于 232323*123456*123512
。
需要也可以与 '232323*123456|123512'
一起使用的解析器。
响应必须针对两个字符串:123456
.
在现有 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
一种方法是:
declare @s varchar(max) = '232323*123456|123512'
首先替换所有字符以具有相同的分隔符:
SET @s = REPLACE(@s, '|', '*')
然后 select 在第一次出现的 *
和下一次出现的 *
之间的子串
SELECT SUBSTRING(@s, CHARINDEX('*', @s) + 1, CHARINDEX('*', @s, CHARINDEX('*', @s) + 1) - CHARINDEX('*', @s) - 1)
您可以尝试同时替换“*”和“|”:
declare @s varchar(max) = '232323*123456|123512'
select parsename(replace(replace(@s, '|', '.'), '*', '.'), 2)