使用 select 查询中的值声明一个变量
Declaring a variable with a value from select query
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 岁人群的年龄以及他们的 ID、生日和年龄。声明@age 是我的问题。我尝试使用 substring(getdate...), 2, 2)
但它似乎不起作用。有任何想法吗?谢谢
目前您将值设置为 @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')
您可以使用 Datediff
函数找出两个日期之间的确切差异
SELECT
datediff(yyyy,GETDATE(),date)
FROM
[PRGX_AS_SandBox].[dbo].[Test_SO]
首先,您不能设置具有多个值的标量变量。
其次,为此您根本不需要变量。
你可以简单地这样做:
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. I think the best answer there is this answer by dotjoe
中的答案
我认为您正在尝试获取 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
无需在查询中使用变量。您可以按照以下方式简单地执行此操作:
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
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 岁人群的年龄以及他们的 ID、生日和年龄。声明@age 是我的问题。我尝试使用 substring(getdate...), 2, 2)
但它似乎不起作用。有任何想法吗?谢谢
目前您将值设置为 @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')
您可以使用 Datediff
函数找出两个日期之间的确切差异
SELECT
datediff(yyyy,GETDATE(),date)
FROM
[PRGX_AS_SandBox].[dbo].[Test_SO]
首先,您不能设置具有多个值的标量变量。 其次,为此您根本不需要变量。 你可以简单地这样做:
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. I think the best answer there is this answer by dotjoe
中的答案我认为您正在尝试获取 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
无需在查询中使用变量。您可以按照以下方式简单地执行此操作:
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