oracle 子串与like运算符的区别

wooyq4lh  于 2023-03-01  发布在  Oracle
关注(0)|答案(1)|浏览(135)
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_____';

这两个select语句之间有什么区别。

83qze16e

83qze16e1#

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

将获取以"B"开头的任何值的前六个字符,无论其长度如何-因为%是任意字符数的通配符。您可能最终得到1、2、3、4、5或6个字符的结果。较长的值将被substr()调用截断。

SELECT gram_panchayat FROM tw_master WHERE gram_panchayat LIKE 'B_____';

将只检索长度正好为6个字符的值-因为_是单个字符的通配符。因此,对它应用substr()不会对结果产生任何影响,因为它的长度不能超过6个字符。
如果列的值长于或短于6个字符,则第二个查询将返回较少的行,因为这是一个限制性更强的匹配。如果所有的值都正好是6个字符,则结果将是相同的-但第一个查询中的substr()也将是不必要的。
您可以看到使用一些不同长度的虚构样本数据的查询之间的差异:
| 格兰姆--潘查亚特|
| - ------|
| ABC定义|
| 乙|
| 学士|
| 巴伯|
| 生物活性炭|
| 巴ABCD|
| BABCDE|
| 贝达CBA|
| 巴氏凝析油|
| 巴伯克德夫格|
| 巴伯德夫|
| 巴卜克代夫吉|
第一个查询返回所有以'B'开头的行,其中一些被截断:
| 普通合伙人|
| - ------|
| 乙|
| 学士|
| 巴伯|
| 生物活性炭|
| 巴ABCD|
| BABCDE|
| 贝达CBA|
| BABCDE|
| BABCDE|
| BABCDE|
| BABCDE|
第二个查询只返回以'B'开头且长度正好为六个字符的查询:
| 格兰姆--潘查亚特|
| - ------|
| BABCDE|
| 贝达CBA|
fiddle

相关问题