我有一个表格,其中包含doc位置的列,例如AA / BB / CC / EE
我试图只获得这些部分中的一个,简单地说CC部分(具有可变长度)。到目前为止,我已尝试如下:
SELECT RIGHT(doclocation,CHARINDEX('/',REVERSE(doclocation),0)-1)
FROM Table
WHERE doclocation LIKE '%CC %'
但我没有得到预期的结果
答案 0 :(得分:0)
使用像这样的PARSENAME函数,
DECLARE @s VARCHAR(100) = 'AA/BB/CC/EE'
SELECT PARSENAME(replace(@s, '/', '.'), 2)
答案 1 :(得分:0)
PARSENAME
函数用于获取对象名称的指定部分,不应该用于此目的,因为它只解析具有最多4个对象的字符串(请参阅{{3处的SQL Server PARSENAME文档) }})
SQL Server 2016有一个新功能STRING_SPLIT
,但是如果你不使用SQL Server 2016,你必须回避这里描述的解决方案:MSDN
答案 2 :(得分:0)
在SQL Server中这很痛苦。一种方法是一系列字符串操作。我使用outer apply
找到了这个最简单的(除非我出于不同的原因需要子查询):
select *
from t outer apply
(select stuff(t.doclocation, 1, patindex('%/%/%', t.doclocation), '') as doclocation2) t2 outer apply
(select left(tt.doclocation2), charindex('/', tt.doclocation2) as cc
) t3;
答案 3 :(得分:0)
我猜这个问题不明确。你能说明你需要哪个值吗?如果您需要CC后的值,那么您可以在“CC”上执行
CHARINDEX
。此外,查询似乎不正确,因为您提供的字符串是“AA / BB / CC / EE”,它之间没有空格,但在查询中您正在搜索空格WHERE doclocation LIKE '%CC %'
SELECT SUBSTRING(doclocation,CHARINDEX('CC',doclocation)+2,LEN(doclocation))
FROM Table
WHERE doclocation LIKE '%CC %'