在 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'
我希望输出仅包含此范围内的记录,但我得到的记录也不符合此条件。请在下面找到示例屏幕截图
基于字符的类型的 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
我想在 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'
我希望输出仅包含此范围内的记录,但我得到的记录也不符合此条件。请在下面找到示例屏幕截图
基于字符的类型的 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