在 postgresql 中对 Varchar 和 Char 数据类型使用 "between" 运算符

Working of "between" operator for Varchar and Char datatypes in postgresql

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

请注意"code"是列名

我有一个带有 VARCHAR 类型列的 table,我应用转换操作将其转换为 "CHAR(5)" 类型。当我在任一列的查询中应用 between operator 时,它不会产生过滤结果。

对于 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' 

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

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

我会这样写逻辑:

where code::int between 4254 and 5855 

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

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