2014-11-14 2 views
0

У меня есть таблица в Postgres, с колонкой с Int (8) значений:Postgres - Выбор строки, начинающиеся со значением

Таблица ТАБЛИЦА:

number | name 
---------------------- 
    1111 | a 
    1122 | b 
    1133 | c 
    1144 | d 
    1155 | e 
    2211 | f 
    2222 | g 
    2233 | h 
    2244 | i 
    2255 | k 

Я хочу выбрать все те строки, «число» начинается с «11»:

number | name 
---------------------- 
    1111 | a 
    1122 | b 
    1133 | c 
    1144 | d 
    1155 | e 

Когда обе колонки (номер и название) относятся к типу VARCHAR, можно сравнивать значения с помощью оператора%, как:

select * 
from TABLE 
where number = '11%' 

Но он не работает на int. Как я могу это сделать?

Спасибо!

ответ

0

Я хотел бы сделать это с явным приведением:

select * 
from TABLE 
where cast(number as varchar(255)) like '11%'; 

Будьте очень осторожно, когда вы пишете код SQL, который делает неявное преобразование.

+0

вы, вероятно, хотели использовать 'like' вместо' = '(хотя я согласен с @a_horse_with_no_name, используйте' varchar (2) 'и' = '11'') – paul

+0

@paul: 'varchar (2)' не будет потому что существующие значения не вписываются в это. Но я больше ссылался на «магическое» значение 255. Нет оптимизаций для «varchar» с длиной 255 по сравнению с 257, 314 или 42 (в современной СУБД). Особенно в Postgres длина не требуется вообще, поэтому «литье (число как varchar)» или даже «cast (number as text)» будет иметь гораздо больше смысла. –

+0

@a_horse_with_no_name. , , Это просто размер по умолчанию, который я использую для вещей, которые должны быть довольно короткими. –

1
SELECT * 
FROM table 
WHERE number::text LIKE '11%' 
+0

Hm. Он работает в MySQL: D. Обновление сделано. –

+0

Да, MySQL довольно неряшлив по поводу проверки типа данных. –

1

Столбец - это номер (int), поэтому вы должны относиться к нему как к одному.

select * 
from TABLE 
where number >= 1100 and number <= 1199 
+0

Что относительно 11999? –

+0

@gurel_kaynak это значение не находится в вопросе, но его можно легко добавить в предложение where, используя OR. – Donal

+0

вопрос говорит, что числовое поле - int (8). Так что даже вопрос в 1199999. Это не в данных примера, но все же это int (8). –

0

Вы должны бросить interger в строку, а затем использовать как:

select * 
from "table" 
where number::text like '11%' 

Также проверьте here

Смежные вопросы