Oracle SQL BETWEEN运算符的结果

时间:2018-01-10 05:00:18

标签: sql oracle

我有一张employee表,其中包含以下记录。

EID     ENAME    RESIDENCE
1000    Sanit    Orissa
1001    Sachi    Tamilnadu
1002    Sampath  Karnataka
1006    Pradeep  MP

我正在玩Oracle SQL的BETWEEN运算符。

查询-1 select * from employee where substr(RESIDENCE,1,1) between 'E' and 'T';

当我检查第一个字符是否在两个字符之间时,它按预期工作,但如果我将文本传递给BETWEEN运算符(请参阅查询2和3),我不明白它是如何工作的?

查询-2 select * from employee where RESIDENCE between 'E' and 'T';

**RESULT**

EID     ENAME    RESIDENCE
1000    Sanit    Orissa
1002    Sampath  Karnataka
1006    Pradeep  MP

查询-3 select * from employee where RESIDENCE between 'Orissa' and 'MP';

**RESULT**

0 rows
  

我看到oracle文档说expressions must be numeric, character, or datetime expressions。但我的查询2和3运行没有任何错误。谁能解释一下这里到底发生了什么?

3 个答案:

答案 0 :(得分:1)

来自oracle文档:

  

关系运算符逐字节地比较两个输入字符串,类似于C库例程strcmp(3C)。每个字节使用ASCII字符集中对应的整数值进行比较,如ascii(5)所示,直到读取空字节或达到最大字符串长度。

所以,在这种情况下,奥里萨邦'大于' E'但是,那就不那么了。

关于您的第三个请求。在between子句,第一个参数必须是最低的,第二个参数必须是最高的。但在您的样本中,最低值和最高值相反。

答案 1 :(得分:1)

select * from employee where RESIDENCE between 'E' and 'T'

它检查ET之间的所有单个字符,以便它返回

Orissa
Karnataka
MP

因为每个字符都介于ET

之间
select * from employee where RESIDENCE between `Orissa` and `MP`

此处,OrissaMP之间没有任何名称,所以如果我将此条件更改为ErissaTP,则会返回< / p>

Orissa
Tamilnadu
Karnataka
MP

答案 2 :(得分:1)

对于查询2,状态为Tamilnadu的行未到,因为您已将条件提及为:

residence between 'E' and 'T'

你可以说'Tamilnadu' > 'T',这就是它没有被选中的原因。如果条件是:

residence between 'E' and 'Tamilnadu'

然后它会起作用。

查询3未返回任何内容,因为您已将条件提及为:

RESIDENCE between 'Orissa' and 'MP'

其中'Orissa' >'MP',因此在此范围之间没有居住地,如在{x}之前的and之前的值应该小于and之后的值。

希望它可以帮到你