SQL查询优化字符串操作

时间:2015-12-16 09:34:23

标签: sql sql-server tsql

我正在尝试运行以下SQL语句,该语句在返回我需要的内容时工作正常但是我不相信它是实现结果的最有效或最优化的方法。

SELECT DISTINCT SUBSTRING((SELECT SUBSTRING(Quest_Fullpath, 13 + 1, LEN(Quest_Fullpath)) 
FROM Quest_Lookup 
where SUBSTRING(Quest_Fullpath, 13, 1) = ':'), 0, CHARINDEX (':', (SELECT SUBSTRING(Quest_Fullpath, 13 + 1, LEN(Quest_Fullpath)) 
FROM Quest_Lookup 
where SUBSTRING(Quest_Fullpath, 13, 1) = ':'))) FROM Quest_Lookup WHERE (SELECT SUBSTRING(Quest_Fullpath, 13 + 1, LEN(Quest_Fullpath)) 
FROM Quest_Lookup 
where SUBSTRING(Quest_Fullpath, 13, 1) = ':') LIKE 'Man%'

澄清:以上语句是以下两个SQL语句的组合。

SELECT DISTINCT SUBSTRING(Y, 0, CHARINDEX (':', Y)) FROM Quest_Lookup WHERE Y LIKE '0%'


Y = SELECT SUBSTRING(Quest_Fullpath, 13 + 1, LEN(Quest_Fullpath)) 
   FROM Quest_Lookup 
   where SUBSTRING(Quest_Fullpath, 13, 1) = ':'

在性能和/或语法方面是否有更简洁的方法来运行它?

示例数据

  

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

     

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

我对上面的数据运行查询,该查询表示由冒号分隔的文件夹结构。查询返回两个冒号之间的字符串,过滤掉任一侧的所有数据,具体取决于执行子字符串操作的样本数据中的哪个位置。在这种情况下,该位置为13,但这会实时更改,因为它表示文本框中键入的文本长度。

1 个答案:

答案 0 :(得分:0)

DRYRIGHT(Quest_Fullpath, 13)添加indexed computed column(或RIGHT(Quest_Fullpath, 14) - 不要真正关注您的代码),并相应地重写您的查询。