2016-09-09 3 views
0

Основной вопрос SQL о задании группы лет в таблице. Работа с базой данных, и мне нужно указать автора, название, дату публикации и розничную цену. У меня есть эта часть, но она также просит выпустить все названия, которые начинаются с «D» и были опубликованы в 1970-х годах.Как указать группу лет в таблице в SQL

У меня есть первая часть вниз (это, как учат нас кстати)

SELECT `fAuthorID`,`fTitle`,`fPubYear`,`fRetailPrice` 
FROM `tBooks` 
WHERE 

Но я не могу показаться, чтобы быть в состоянии получить его для вывода авторов с «D» и годы 1970- 1979 год.

+1

Какая СУБД вы используете? –

+0

@a_horse_with_no_name relational – Dewie

+1

Конечно, иначе вы бы не использовали SQL. Но вы используете Postgres? Oracle? DB2? Firebird? –

ответ

-1
SELECT fauthorID, fTitle, fPubYear, fReatailPrice 
FROM tbooks 
WHERE fTitle Like 'D%' AND fPubYear Like '197_' 
+0

Я знал, что это будет легкий ответ ... спасибо soooo soooo much !!! – Dewie

+2

@ Dewie Использование 'LIKE' в номере - это плохой стиль кодирования и не всегда будет работать так, как вы ожидаете, из-за неявного преобразования типов данных, которое происходит там. Другие базы данных просто отвергли бы это. 'LIKE' для чисел, а не для строк. Используйте 'where fpubyear в период с 1970 по 1979 год' вместо –

-1

Привет Dewie
Вам использовать этот запрос,

SELECT fAuthorID,fTitle,fPubYear,fRetailPrice 
FROM tBooks 
WHERE fTitle like 'D%' and fPubYear like '%197%'; 

Надеется, что это даст вам результат. Любые вопросы, просто дайте мне знать

+1

Использование' LIKE' в номере - это плохой стиль кодирования и не всегда будет работать так, как вы ожидаете, из-за неявного преобразования типа неявных данных, которое происходит там. Другие базы данных просто отвергли бы это. 'LIKE' для чисел, а не для строк. Используйте 'where fpubyear в период с 1970 по 1979 год' вместо –

+0

скажите мне одну вещь, на которой ваша дата в каком формате? –

+1

Если вы считаете, что 'fpubyear' является столбцом' DATE', использование 'LIKE' еще хуже. –

1

Предполагая, что fpubyear является числовым (целочисленным) столбцом, правильным способом запроса для непрерывного диапазона лет является использование оператора BETWEEN.

SELECT fauthorID, fTitle, fPubYear, fReatailPrice 
FROM tbooks 
WHERE fTitle Like 'D%' 
    AND fPubYear BETWEEN 1970 and 1979; 

между оператором включает в себя оба конца. Он имеет дополнительное преимущество в том, что индекс для fpubyear может использоваться для быстрого поиска совпадающих строк - это не так, если сначала нужно преобразовать номер в строку, чтобы иметь возможность применить к нему оператор LIKE.


LIKE для символьных значений («струна»), он не должен быть использован с другими типами - особенно, если полагаться на зло неявного преобразования типа данных. Другая база данных просто отклоняла бы применение как в столбце числа.

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