使用 substr 和 like 运算符的区别

0 sql oracle oracle11g

SELECT SUBSTR(gram_panchayat,1,6) GP FROM tw_master WHERE gram_panchayat LIKE 'B%';

SELECT gram_panchayat FROM tw_master WHERE gram_panchayat LIKE 'B_____';
Run Code Online (Sandbox Code Playgroud)

这两个选择语句有什么区别。

Ale*_*ole 8

SELECT SUBSTR(gram_panchayat,1,6) GP FROM tw_master WHERE gram_panchayat LIKE 'B%';
Run Code Online (Sandbox Code Playgroud)

将获取(最多)以“B”开头的任何值的前六个字符,无论它有多长 - 就像%任意数量字符的通配符一样。您最终可能会得到包含 1、2、3、4、5 或 6 个字符的结果。较长的值将被调用截断substr()

SELECT gram_panchayat FROM tw_master WHERE gram_panchayat LIKE 'B_____';
Run Code Online (Sandbox Code Playgroud)

只会检索正好六个字符长的值 - 就像_单个字符的通配符一样。因此,应用substr()它不会对结果产生任何影响,因为它无论如何都不能超过六个字符。

如果列中的值长于或短于六个字符,则第二个查询将返回更少的行,因为它是限制性更强的匹配。如果所有值正好是六个字符,那么结果将是相同的 - 但substr()第一个查询中的 也将是不必要的。


您可以看到具有不同长度的一些虚构示例数据的查询之间的差异:

GRAM_PANCHAYAT
ABCDEF
学士
巴布
巴布克
BABCD
BABCDE
贝德克商学院
BABCDEF
BABCDEFG
BABCDEFGH
BABCDEFGHI

第一个查询返回以“B”开头的所有行,其中一些被截断:

全科医生
学士
巴布
巴布克
BABCD
BABCDE
贝德克商学院
BABCDE
BABCDE
BABCDE
BABCDE

第二个查询仅返回以“B”开头且长度恰好为六个字符的查询:

GRAM_PANCHAYAT
BABCDE
贝德克商学院

小提琴