如何对可变长度的记录进行子串

时间:2016-09-07 09:41:32

标签: sql sql-server

我有一个表格,其中包含doc位置的列,例如AA / BB / CC / EE

我试图只获得这些部分中的一个,简单地说CC部分(具有可变长度)。到目前为止,我已尝试如下:

SELECT RIGHT(doclocation,CHARINDEX('/',REVERSE(doclocation),0)-1) 
FROM Table 
WHERE doclocation LIKE '%CC %'

但我没有得到预期的结果

4 个答案:

答案 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 %'