db2 между запросом для столбцов char - PullRequest
0 голосов
/ 23 января 2020

У меня есть сценарий, в котором есть таблица, подобная приведенной ниже

Имя таблицы: Employee

id EmpName(char 4) -always 4 chars only
1  ARUN
2  BALA
3  LOKI

Я хотел запрос Db2, который должен дать мне список сотрудников, имя которых начинается с От A до D. Должны отображаться значения сотрудников, чьи имена начинаются с A, B, C и D

Я пробовал этот запрос

select * from employee where empname between 'A000' and 'DZZZ'

Не работает должным образом

Ответы [ 4 ]

2 голосов
/ 23 января 2020

Используйте следующую версию:

select e.*
from employee e
where e.empname >= 'A' and
      e.empname < 'E'

Это делает именно то, что вы просите - и не делает никаких предположений о втором символе. Кроме того, он безопасен для индексов, если у вас есть индекс на empname (хотя вы выбираете так много строк, что индексы, вероятно, не релевантны).

2 голосов
/ 23 января 2020

Переключитесь на 'AAAA' в качестве начального значения.

where empname between 'AAAA' and 'DZZZ'

Будет работать намного лучше, если empname проиндексирован.

ANSI SQL совместимый и переносимый, должен отлично работать на обоих DB2 и Postgresql.

РЕДАКТИРОВАТЬ:

Если будут сохранены имена операций короче 4 символов, вы можете изменить на:

where empname between 'A' and 'DZZZ'

(Не пропустит сотрудника «А».)

0 голосов
/ 23 января 2020

Попробуйте тоже

select empname from employee where empname
REGEXP'^[ABCD]'
0 голосов
/ 23 января 2020

Попробуйте это

select empname from employee where empname like 'A%' or 
empname like 'B%' or empname like 'C%' or 
empname like 'D%' 
order by empname 
...