Оператор SQL для запроса возрастного диапазона от доб - PullRequest
0 голосов
/ 04 мая 2011

Привет. У меня есть стол под названием "лица". Конечно, у него есть дата в качестве даты. Я рассчитываю возраст со следующим утверждением:

SELECT DATE_FORMAT( NOW( ) ,  '%Y' ) - DATE_FORMAT( fecha_nac,  '%Y' ) - 
( DATE_FORMAT(NOW( ) ,  '00-%m-%d' ) < DATE_FORMAT( fecha_nac,  '00-%m-%d' ) ) 
AS edad

Но когда я пытаюсь запросить определенный возраст со следующим утверждением, это выдает мне ошибки:

SELECT DATE_FORMAT( NOW( ) ,  '%Y' ) - DATE_FORMAT( fecha_nac,  '%Y' ) - 
( DATE_FORMAT( NOW( ) ,  '00-%m-%d' ) < DATE_FORMAT( fecha_nac,  '00-%m-%d' ) ) 
AS edad WHERE edad BETWEEN 1 AND 50

Конечно, это дает мне ошибку, потому что столбец "edad" не существует. Мне нужен SQL-запрос, чтобы перечислить всех людей в возрасте от dob. Я не знаю, как сделать этот запрос, пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 05 мая 2011

MySQL не допускает конструкцию WITH. Если на данный момент вам нужны только люди, а не их точный возраст, вы можете перенести тест в предложение WHERE.

SELECT nombre, otras_cosas FROM personas 
WHERE NOW() 
 BETWEEN (CAST(fecha_nac) AS DATETIME) + INTERVAL 1 YEAR
   AND (CAST(fecha_nac) AS DATETIME) + INTERVAL 50 YEAR;
1 голос
/ 05 мая 2011

Есть два способа сделать это без временных таблиц.

Во-первых, вы должны повторить вычисление, где

SELECT yourtable.nombre, yourtable.otras_cosas,
      Date_format(Now(), '%Y') - Date_format(fecha_nac, '%Y') - ( 
              Date_format(Now(), '00-%m-%d') < Date_format(fecha_nac, '00-%m-%d' 
                                               ) ) AS 
       edad 
FROM   yourtable 
WHERE  Date_format(Now(), '%Y') - Date_format(fecha_nac, '%Y') - ( 
              Date_format(Now(), '00-%m-%d') < Date_format(fecha_nac, '00-%m-%d' 
                                               ) ) BETWEEN 1 AND 50 

Во-вторых, использовать встроенное представление

SELECT   t.nombre, t.otras_cosas, t.edad 
FROM   (SELECT  nombre, otras_cosas, Date_format(Now(), '%Y') - Date_format(fecha_nac, '%Y') - ( 
                              Date_format(Now(), '00-%m-%d') < 
                              Date_format(fecha_nac, '00-%m-%d') ) AS edad 
        FROM   yourtable) t 
WHERE  t.edad BETWEEN 1 AND 50 
1 голос
/ 04 мая 2011
    WITH TBL AS
    (
    SELECT DATE_FORMAT( NOW( ) ,  '%Y' ) - DATE_FORMAT( fecha_nac,  '%Y' ) - ( DATE_FORMAT( NOW( ) ,  '00-%m-%d' ) < DATE_FORMAT( fecha_nac,  '00-%m-%d' ) ) AS edad
FROM Persons
    )

    SELECT Edad FROM TBL WHERE Edad BETWEEN 1 AND 50

Выше указан SQL Server. Вы можете использовать временные таблицы, чтобы выполнить то же самое в других базах данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...