Postgresql中Varchar和Char数据类型的“ between”运算符的工作

时间:2019-04-18 03:52:00

标签: sql postgresql pgadmin pgadmin-4

我想在表的“ varchar”和“ char(5)”列上使用“ between”运算符。但是,我看不到结果中“ between”运算符的任何影响。

请注意,“代码”是列名

我有一个表,该表的列为VARCHAR类型,我应用了强制转换操作将其转换为“ CHAR(5)”类型。当我在任一列的查询中的运算符之间应用时,它不会产生过滤结果。

对于VARCHAR列

select code from diagnoses where code between '4254' and 
'5855'

对于CHAR(5)列

 select cast(code as char(5)) as code
 from diagnoses where code between '4254' and '5855' 

我希望输出中只有该范围内的记录,但我也会得到不符合此条件的记录。请在下面找到示例屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

基于字符的类型的BETWEEN运算符适用于字母顺序。这意味着它使用订单

4254
45829
486
...
58381
5845
5855

因此输出是完全正确的。

如果需要数字顺序,则必须将其转换为适当的数据类型:

select 
    cast(code as char(5)) as code
from 
    diagnoses 
where 
    cast(code as int) between 4254 and 5855 -- cast here

结果:

4254
5119
5589
5845
5855

答案 1 :(得分:1)

我会这样写逻辑:

where code::int between 4254 and 5855 

或者,如果您想使用索引:

where code between '4254' and '5855' and
      length(code) = 4