2015-04-10 4 views
0

Я просто хотел бы знать, если это возможно, чтобы написать SQL заявление, в котором можно выбрать строки столбцами, которые содержат символы, начинающиеся с букв, которые появляются позже в алфавитеSQL алфавиту Оператор Select

у меня есть таблица

CREATE TABLE data (
    d_idno SERIAL PRIMARY KEY, 
    d_idch CHAR(3) NOT NULL, 
    d_desc CHAR(25) NOT NULL 
); 

Со следующими данными внутри него

INSERT INTO data (d_idch, d_desc) 
VALUES('BLK', 'black item'), 
     ('PNK', 'pink item'), 
     ('GRN', 'green item'), 
     ('BLU', 'blue item'), 
     ('CYA', 'cyan item'); 

Я хотел бы выполнить SQL заявление по линии

SELECT * FROM data 
WHERE d_idch > 'BL' # I'd like to find a way to replace this line 
ORDER BY d_idch 

Это неправильно, конечно, но я хотел бы, чтобы выбрать все строки, которые следуют после строк, которые содержат CHARS «BL», когда в алфавитном порядке

+0

Почему это неправильно? Это будет выбирать каждую строку с «BL» и более. – JNevill

+0

Да, но я бы хотел, чтобы он не включал строки с BL, мне нужны строки, содержащие первые два символа, которые следуют позже в алфавите – Trent

+0

Предпочтительно не использовать WHERE d_idch> 'BM' – Trent

ответ

1

Вы можете добавить еще одно условие на вашем предложении WHERE держать BL результаты из:

SELECT * FROM data 
WHERE 
    d_idch > 'BL' 
    AND SUBSTRING(d_idch FROM 1 FOR 2) <> 'BL' 
ORDER BY d_idch 

Таким образом, вы получаете все больше BL, но не что-либо, начиная с BL

В качестве альтернативы, вы можете придерживаться ZZZZZZ в конце вашего BL:

SELECT * 
FROM data 
WHERE d_idch > 'BLZZZZ' 
ORDER BY d_idch 

И еще одна альтернатива, которую я думаю, что, вероятно, ближе к тому, что вы ищете (все они имеют одни и те же результаты, хотя):

SELECT * 
FROM data 
WHERE 
    SUBSTRING(d_idch FROM 1 FOR 2) > 'BL' 
ORDER BY d_idch 

SQL Fiddle here

Если таблица огромно, вы можете обнаружить, что второй, чтобы быть самым быстрым, так как ваш DB не должен substring каждый d_idch как часть логики. Торговое предложение ...

+0

А, подстрока выглядит точно так, как я нужен, мне просто не нравится использовать SQL, который не ясен, поэтому подстрока я могу быть более конкретным. 3-й ответ - прекрасный, спасибо кучу – Trent

+0

db очень большой, поэтому я хочу использовать это, чтобы проходить через биты таблиц за раз, запускать запросы по строкам от A до E, а затем от F до J и т. Д. Спасибо за вашу помощь – Trent

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