SQL Server-获取所选年份中所有年满25岁的人员
我有一个包含3个字段的表:SQL Server-获取所选年份中所有年满25岁的人员,sql,sql-server,Sql,Sql Server,我有一个包含3个字段的表: 全名(Nvarchar(100)) 账户(Nvarchar(50)) 生日(日期时间) 我需要的是创建一个查询,从中获取所选年份中所有过25岁生日的人 例如,了解所有在2003年过25岁生日的人 现在我有这个: DECLARE @dynamicdate DATETIME SET @dynamicdate = CONVERT(datetime, '20131231') SELECT * FROM persons p WHERE (year(@dynamicdate
- 全名(Nvarchar(100))
- 账户(Nvarchar(50))
- 生日(日期时间)
DECLARE @dynamicdate DATETIME
SET @dynamicdate = CONVERT(datetime, '20131231')
SELECT *
FROM persons p
WHERE
(year(@dynamicdate-p.birthdate)-1900)=25
但我知道这是完全错误的,应该非常简单,有什么线索吗?尽量避免对
WHERE
子句中使用的列执行计算或函数。相反,请更改表达式,使列本身位于条件表达式的一侧,如下所示:
DECLARE @BirthYear int = 2003 - 25;
SELECT *
FROM dbo.Persons P
WHERE
P.BirthDate >= DateAdd(year, @BirthYear - 2000, '20000101')
AND P.BirthDate < DateAdd(year, @BirthYear - 2000, '20010101')
;
DECLARE@BirthYear int=2003-25;
挑选*
来自dbo.P
哪里
P.BirthDate>=DateAdd(年份,@birthdear-2000,'20000101')
和P.生日<日期添加(年份,@BirthYear-2000,'20010101')
;
请特别注意我使用的不等式运算符,
=
和尽量避免对WHERE
子句中使用的列执行计算或函数。相反,请更改表达式,使列本身位于条件表达式的一侧,如下所示:
DECLARE @BirthYear int = 2003 - 25;
SELECT *
FROM dbo.Persons P
WHERE
P.BirthDate >= DateAdd(year, @BirthYear - 2000, '20000101')
AND P.BirthDate < DateAdd(year, @BirthYear - 2000, '20010101')
;
DECLARE@BirthYear int=2003-25;
挑选*
来自dbo.P
哪里
P.BirthDate>=DateAdd(年份,@birthdear-2000,'20000101')
和P.生日<日期添加(年份,@BirthYear-2000,'20010101')
;
请特别注意我使用的不等式运算符,=
和尽量避免对WHERE
子句中使用的列执行计算或函数。相反,请更改表达式,使列本身位于条件表达式的一侧,如下所示:
DECLARE @BirthYear int = 2003 - 25;
SELECT *
FROM dbo.Persons P
WHERE
P.BirthDate >= DateAdd(year, @BirthYear - 2000, '20000101')
AND P.BirthDate < DateAdd(year, @BirthYear - 2000, '20010101')
;
DECLARE@BirthYear int=2003-25;
挑选*
来自dbo.P
哪里
P.BirthDate>=DateAdd(年份,@birthdear-2000,'20000101')
和P.生日<日期添加(年份,@BirthYear-2000,'20010101')
;
请特别注意我使用的不等式运算符,=
和尽量避免对WHERE
子句中使用的列执行计算或函数。相反,请更改表达式,使列本身位于条件表达式的一侧,如下所示:
DECLARE @BirthYear int = 2003 - 25;
SELECT *
FROM dbo.Persons P
WHERE
P.BirthDate >= DateAdd(year, @BirthYear - 2000, '20000101')
AND P.BirthDate < DateAdd(year, @BirthYear - 2000, '20010101')
;
DECLARE@BirthYear int=2003-25;
挑选*
来自dbo.P
哪里
P.BirthDate>=DateAdd(年份,@birthdear-2000,'20000101')
和P.生日<日期添加(年份,@BirthYear-2000,'20010101')
;
请特别注意我使用的不等式运算符,=
和您应该能够简单地查询所讨论日期的年份部分,因为您只想知道这些人的25岁生日是否属于这一年
DECLARE @Year AS INT
SET @Year = 2003
SELECT *
FROM Persons P
WHERE ((@Year - DATEPART(yy, birthdate)) = 25)
这把小提琴演示了
请记住,这不是优化的,但在您实际测量性能并确定此特定查询是一个问题之前,我不会进行优化。首先,我将重点介绍最简单、最容易阅读的解决方案。您应该能够简单地查询所讨论日期的年份部分,因为您只想知道这些人的25岁生日是否属于这一年
DECLARE @Year AS INT
SET @Year = 2003
SELECT *
FROM Persons P
WHERE ((@Year - DATEPART(yy, birthdate)) = 25)
这把小提琴演示了
请记住,这不是优化的,但在您实际测量性能并确定此特定查询是一个问题之前,我不会进行优化。首先,我将重点介绍最简单、最容易阅读的解决方案。您应该能够简单地查询所讨论日期的年份部分,因为您只想知道这些人的25岁生日是否属于这一年
DECLARE @Year AS INT
SET @Year = 2003
SELECT *
FROM Persons P
WHERE ((@Year - DATEPART(yy, birthdate)) = 25)
这把小提琴演示了
请记住,这不是优化的,但在您实际测量性能并确定此特定查询是一个问题之前,我不会进行优化。首先,我将重点介绍最简单、最容易阅读的解决方案。您应该能够简单地查询所讨论日期的年份部分,因为您只想知道这些人的25岁生日是否属于这一年
DECLARE @Year AS INT
SET @Year = 2003
SELECT *
FROM Persons P
WHERE ((@Year - DATEPART(yy, birthdate)) = 25)
这把小提琴演示了
请记住,这不是优化的,但在您实际测量性能并确定此特定查询是一个问题之前,我不会进行优化。首先,我将重点介绍最简单、最容易阅读的解决方案。您可以使用datepart传递值(也可以传递日期)
选择*from Person,其中(datepart(year,'2007-12-31')-datepart(year,birthdate))=25您可以使用datepart传递值(也可以传递日期)
选择*from Person,其中(datepart(year,'2007-12-31')-datepart(year,birthdate))=25您可以使用datepart传递值(也可以传递日期)
选择*from Person,其中(datepart(year,'2007-12-31')-datepart(year,birthdate))=25您可以使用datepart传递值(也可以传递日期)
选择*from Person,其中(datepart(year,'2007-12-31')-datepart(year,birthdate))=25假设所有生日都是日期(没有时间部分),应该是这样的。那么您只需要使用where子句:
where birthdate between
dateadd(year, @year-1925, 0) And
dateAdd(day, -1, dateadd(year, @year-1924, 0))
假设所有的生日都是日期(没有时间部分),应该是这样的。那么您只需要使用where子句:
where birthdate between
dateadd(year, @year-1925, 0) And
dateAdd(day, -1, dateadd(year, @year-1924, 0))
假设所有的生日都是日期(没有时间部分),应该是这样的。那么您只需要使用where子句:
where birthdate between
dateadd(year, @year-1925, 0) And
dateAdd(day, -1, dateadd(year, @year-1924, 0))
假设所有的生日都是日期(没有时间部分),应该是这样的。那么您只需要使用where子句:
where birthdate between
dateadd(year, @year-1925, 0) And
dateAdd(day, -1, dateadd(year, @year-1924, 0))
请参阅我的更新,强调在WHERE
子句中使用正确的不等式运算符的重要性。请参阅我的更新,强调在WHERE
子句中使用正确的不等式运算符的重要性。请参阅我的更新,强调在WHERE
请参阅我的更新,强调使用t的重要性