我的字符串看起来像这样:
\\\abcde\fghijl\akjfljadf\\
\\xyz\123
我想选择第一组和下一组斜线之间的所有内容
期望的结果:
abcde
xyz
编辑:为了澄清,特殊字符总是斜线 - 但是前导字符不是常量,有时有3个斜杠,其他时间只有2个斜杠,后跟文本,然后是1个或多个斜杠,一些更多的文本,一个或多个斜杠,依此类推。我根本没有使用任何适配器,只是想在SQL查询中选择这个子串的方法
请告知。
提前致谢。
答案 0 :(得分:2)
您可以执行cross join
来查找反斜杠的第二个位置。然后,使用substring
函数获取文本的第2个和第3个反斜杠之间的字符串,如下所示:
SELECT substring(string, 3, (P2.Pos - 2)) AS new_string
FROM strings
CROSS APPLY (
SELECT (charindex('\', replace(string, '\\', '\')))
) AS P1(Pos)
CROSS APPLY (
SELECT (charindex('\', replace(string, '\\', '\'), P1.Pos + 1))
) AS P2(Pos)
<强>更新强>
如果你的字符串中有不明数量的反斜杠,你可以这样做:
DECLARE @string VARCHAR(255) = '\\\abcde\fghijl\akjfljadf\\'
SELECT left(ltrim(replace(@string, '\', ' ')),
charindex(' ',ltrim(replace(@string, '\', ' ')))-1) AS new_string
答案 1 :(得分:1)
使用子字符串,就像这样(仅适用于指定模式的两个斜杠,字符,然后是另一个斜杠):
declare @str varchar(100) = '\\abcde\cc\xxx'
select substring(@str, 3, charindex('\', @str, 3) - 3)
当然,将@str
替换为您实际要搜索的列。
charindex
返回第一个斜杠的位置,从第3个字符开始(即跳过前两个斜杠)。然后substring
从第3个字符开始返回字符串的一部分(再次跳过前两个斜杠),并继续直到下一个斜杠之前,由charindex
确定。
编辑:要在开始时使用不同数量的斜杠,请使用带有正则表达式的patindex
来查找第一个字母数字字符,而不是硬编码它应该是第三个字符。例如:
declare @str varchar(100) = '\\\1Abcde\cc\xxx'
select substring(@str, patindex('%[a-zA-Z0-9]%', @str), charindex('\', @str, patindex('%[a-zA-Z0-9]%', @str)) - patindex('%[a-zA-Z0-9]%', @str))
答案 2 :(得分:0)
如果你的字符串总是遵循描述的模式,APH的解决方案会更好。然而,尽管有这种模式,这将得到文本。
<option value="' . $country. '">' . $country . '</option>';
抱歉格式化。
已修改以更正用户粘贴错误。 :)