选择X的子字符串,其中X的子字符串等于特定字符

时间:2015-12-15 16:55:36

标签: sql sql-server

我正在努力用我目前尝试的SQL查询返回我需要的数据。

我最接近的是下面的SQL

SELECT SUBSTRING(path, Y + 1, 200) FROM lookup WHERE (SELECT SUBSTRING(path, Y, 1) FROM lookup) = ':'

  

01测试此字符串:财务和税务:欧洲:荷兰:直播   计划和项目

     

02 Something:管理项目和项目:亚洲:尼泊尔:现场活动和项目

澄清:上面的行显示了我存储在表格中的数据结构,表示每个级别用冒号分隔的文件夹结构。在上面的例子中,我需要找到一些长度为Y的substr,例如使用02上面的数据我找到第一个冒号

> SELECT SUBSTRING(path, 13, 1) FROM lookup WHERE *character* = ':'

它匹配字符':',这对于02条目而不是01是正确的。现在我需要从位置Y + 1开始返回该表中的所有substr表达式,例如使用

> SELECT SUBSTRING(path, 13 + 1, 200) FROM lookup

返回

  

是字符串:财务和税务:欧洲:荷兰:现场节目和   项目

     

管理项目和项目:亚洲:尼泊尔:现场活动和项目   项目

但我只想要第13个位置的字符=':'的第一个表达式的结果为真,所以在这种情况下我只想要返回第二行数据。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

试试这个

SELECT SUBSTRING(path, Y + 1, len(path)) -- Instead of 200 use Len() function
FROM lookup 
where SUBSTRING(path, Y, 1) = ':' -- Replace Y with position

答案 1 :(得分:0)

听起来你想要在第一个冒号之后返回所有内容,无论它在哪里。这是你如何做到的:

SELECT SUBSTRING(path, CHARINDEX(':', path) + 1, len(path)) as after_first_colon
FROM lookup