Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с проблемой с языком sql

hhhhhhhhhtttt Ученик (79), открыт 2 недели назад
Задание: 3. Создайте запрос <Дни рождения>, в котором будут выбраны сотрудники, которые родились в апреле.
Вот код на sql access:
SELECT Дата рождения
FROM Сотрудники;
WHERE Дата рождения Between '01.04' And '30.04';
Показывает ошибку (на фото)
3 ответа
Jurijus Zaksas Искусственный Интеллект (430804) 2 недели назад
Ответ зависит от используемой СУБД - с датами каждая работает по-своему. На Оракле синтаксис был бы таким:

 WHERE EXTRACT(MONTH FROM "Дата рождения") = 4 
Более (но не абсолютно) универсальный вариант:
 WHERE TO_CHAR("Дата рождения", 'MM') = '04' 
И еще такой момент: если поле содержит нелатинские символы или пробелы, это счастье необходимо экранировать. Как именно - опять же, зависит от СУБД.
Татьяна Просветленный (32653) 2 недели назад
Ошибка возникает из-за неверного синтаксиса в запросе. Нужно убрать лишнюю точку с запятой после FROM Сотрудники, а также правильно указать диапазон дат. правильный запрос:
 SELECT [Дата рождения]  
FROM Сотрудники
WHERE Month([Дата рождения]) = 4;
Этот запрос выбирает все записи сотрудников, у которых месяц рождения равен апрелю (4).
Если поле "[Дата рождения]" имеет формат даты и времени, и нужно выбирать только дни рождения в апреле, правильный способ будет использовать функцию Month, как показано выше.
Андрей Высший разум (436252) 2 недели назад
Имена, содержащие недопустимые в идентификаторах символы (в том числе и пробел), обязаны экранироваться. Так что в обоих местах в запросе вместо Дата рождения должно быть:
  • MySQL: `Дата рождения`
  • PostgreSQL: "Дата рождения"
  • Microsoft: [Дата рождения]

Если поле Дата рождения имеет тип date, datetime, timestamp и т.п., то в сравнениях (включая between) необходимо указывать не только день и месяц, но и год. Или выделять из даты номер месяца, как предложил Jurijus Zaksas.
Похожие вопросы