Работа оператора "между" для типов данных Varchar и Char в postgresql

93
15

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

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

У меня есть таблица со столбцом типа 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

спросил(а) 2019-04-18T06:52:00+03:00 1 год, 6 месяцев назад
1
Решение
58

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

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

ответил(а) 2019-04-18T10:01:00+03:00 1 год, 6 месяцев назад
42

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

where code::int between 4254 and 5855 

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

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

ответил(а) 2019-04-18T14:36:00+03:00 1 год, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема