T-SQL - 如何在字符串中查找第n个字符

4

我有一个需要第6和第7个字符等于“73”的字符串,我尝试使用 LIKE '%73%',但问题是有时SQL Server会匹配到字符串中的其他“73”,是否有一种方式只搜索字符串中第6和第7个字符?

非常感谢大家的帮助!

4个回答

13

使用 SUBSTRING ( 表达式 ,起始位置 , 长度 )

SELECT mycolumn 
FROM mytable
WHERE SUBSTRING ( mycolumn ,6 , 2 ) = '73'

6

使用like,你可以进行以下操作:

where col like '_____73%'

当然,其他建议使用 substring() 的解决方案也非常明智。

3
使用SUBSTRING函数:
SELECT SUBSTRING(YourColumn,6,2) Result
FROM dbo.YourTable;

您可以将其用作过滤器:
SELECT *
FROM dbo.YourTable
WHERE SUBSTRING(YourColumn,6,2) = '73';

2

尝试使用这个方法来操作 SQL Server

select *
from MyTable
where CHARINDEX('73', MyString) = 6

这个函数会在字符串的第6个位置开始寻找'73'子串的起始位置。


2
使用这种方法可能会付出性能代价。因为它必须扫描MyString以查找73的出现位置来获取其索引。使用SUBSTRING会更好。有时它会错过另一个73位于位置6之前的记录。 - Marek Vitek
@MarekVitek:性能惩罚与子字符串解决方案相同。 - TheGameiswar
@TheGameiswar 对于短字符串,差异将非常小。但是考虑一些较长的字符串,那么您将不得不迭代它,直到找到您要查找的内容或者直到达到末尾。这是昂贵的。而子字符串只会查看这两个字符。顺便说一句:Gordon Linoff提供的解决方案可能比使用子字符串更快。SQL Server引擎在某些情况下被调整为更高效。 - Marek Vitek
以下是查询语句 select last_name from contact where SUBSTRING(last_name, 4,5) = 'ek' 的数字结果:SUBSTRING CPU 时间 = 16 毫秒,经过时间 = 15 毫秒 CHARINDEX CPU 时间 = 109 毫秒,经过时间 = 106 毫秒 - Marek Vitek
带有LIKE的版本稍微慢一些,CPU时间=16毫秒,经过时间=21毫秒,有时甚至比SUBSTRING更长。 - Marek Vitek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接