Работа оператора «между» для типов данных Varchar и Char в postgresql - PullRequest
0 голосов
/ 18 апреля 2019

Я хотел бы использовать оператор «между» в столбцах «varchar» и «char (5)» в таблице. Тем не менее, я не вижу какого-либо эффекта между оператором в результатах.

Обратите внимание, что "code" - это имя столбца

У меня есть таблица со столбцом типа VARCHAR, и я применяю операцию приведения, чтобы преобразовать ее в тип "CHAR (5)". Когда я применяю оператор 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' 

Я ожидаю, что выходные данные будут содержать только записи в этом диапазоне, но вместо этого я получаю записи, которые также не соответствуют этим критериям. Пожалуйста, найдите пример скриншота ниже

enter image description here

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Я бы написал логику так:

where code::int between 4254 and 5855 

Или, если вы хотите использовать индекс:

where code between '4254' and '5855' and
      length(code) = 4
1 голос
/ 18 апреля 2019

демо: дб <> скрипка

Оператор 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
...