2015-11-26 2 views
0
DECLARE @age DATETIME 
SET @age = (GETDATE() - emp.Birthdate) 

SELECT 
    emp.BusinessEntityID, emp.BirthDate, @age 
FROM 
    HumanResources.Employee AS emp 
WHERE 
    emp.OrganizationLevel > = 3 
    AND ((GETDATE() - emp.Birthdate) BETWEEN '1930-01-01 00:00:00.000' AND '1940-01-01 00:00:00.000') 

Как вы можете видеть, это не сработает, я надеюсь показать возраст людей в возрасте 30-40 лет с их идентификатором, днем ​​и днем , объявление @age - моя проблема. Я попытался использовать substring(getdate...), 2, 2), но он, похоже, не работает. Есть идеи? БлагодаряОбъявление переменной со значением из выбранного запроса

+0

Для чего нужна переменная? Вы можете просто добавить вычисляемый столбец с формулой 'getdate() - emp.birthdate' в ваш список избранных –

ответ

0

Не нужно использовать переменную в запросе. Вы можете сделать это просто следующим образом:

SELECT t.BusinessEntityID, t.BirthDate, t.Age 
FROM 
(SELECT emp.BusinessEntityID, emp.BirthDate, CAST(datediff(DAY, emp.Birthdate, GETDATE())/(365.23076923074) as int) as 'Age' 
FROM HumanResources.Employee AS emp 
WHERE emp.OrganizationLevel > = 3) t 
WHERE t.Age >= 30 and t.Age <=40 
+0

Спасибо! Это действительно полезно! –

1

На данный момент вы установите значение для @age,

SET @age = (GETDATE() - emp.Birthdate) 

нет emp.

Вы можете просто сделать следующий запрос:

SELECT emp.BusinessEntityID, emp.BirthDate, (GETDATE() - emp.Birthdate) AS Age 
FROM HumanResources.Employee AS emp 
WHERE emp.OrganizationLevel > = 3 AND 
     (GETDATE() - emp.Birthdate) BETWEEN '1930-01-01 00:00:00.000' AND '1940-01-01 00:00:00.000') 
0

Вы можете использовать Datediff функцию, чтобы найти точное различие между 2 датами

SELECT 
    datediff(yyyy,GETDATE(),date) 
FROM 
    [PRGX_AS_SandBox].[dbo].[Test_SO] 
+0

Это мой первый раз использовать DATEDIFF(), и похоже, что я буду использовать это чаще, спасибо! –

0

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

SELECT BusinessEntityID, BirthDate, DATEDIFF(Year, BirthDate, GETDATE()) As Age 
FROM HumanResources.Employee 
WHERE OrganizationLevel > = 3 
AND DATEDIFF(Year, BirthDate, GETDATE()) BETWEEN 30 AND 40 

Примечание: Это не даст точный возраст. Чтобы получить точный возраст, вы можете использовать ответы в this post. Я думаю, что лучший ответ есть this answer по dotjoe

0

Я думаю, что вы пытаетесь получить сотрудник от 30 до 40 лет, вы можете просто использовать DateDiff функции, чтобы сделать это как следующий запрос:

SELECT BusinessEntityID,BirthDate,DATEDIFF(YEAR,BirthDate,GETDATE()) AS Age 
FROM HumanResources.Employee 
WHERE DATEDIFF(YEAR,BirthDate,GETDATE()) BETWEEN 30 AND 40 
ORDER BY Age ASC  
Смежные вопросы