日期:2014-05-17  浏览次数:20612 次

SQL SERVER where字句的问题

关于这段代码中,当‘王非’这个名字在表中不止一个是怎么办啊?!

declare @age int
set @age=YEAR(GETDATE())
select 学生号,姓名,@age-YEAR(出生日期) as 年龄
from dbo.学生
where 学生号>(select 学生号 from dbo.学生 where 姓名='王非')
and @age-YEAR(出生日期)<(select @age-YEAR(出生日期) from dbo.学生 where 姓名='王非')
------最佳解决方案--------------------

declare @age int
set @age=YEAR(GETDATE())
select 学生号,姓名,@age-YEAR(出生日期) as 年龄
from dbo.学生
where 学生号>(select top(1) 学生号 from dbo.学生 where 姓名='王非')
and @age-YEAR(出生日期)<(select top(1) @age-YEAR(出生日期) from dbo.学生 where 姓名='王非')

------其他解决方案--------------------
select top 1
select max()都行
------其他解决方案--------------------
declare @age int
set @age=YEAR(GETDATE())
select 学生号,姓名,@age-YEAR(出生日期) as 年龄
from dbo.学生
where 学生号>all (select 学生号 from dbo.学生 where 姓名='王非')
and @age-YEAR(出生日期)<(select @age-YEAR(出生日期) from dbo.学生 where 姓名='王非') 
------其他解决方案--------------------
引用:
and @age-YEAR(出生日期)<(select @age-YEAR(出生日期) from dbo.学生 where 姓名='王非') 

换成
and @age-YEAR(出生日期)< all (select @age-YEAR(出生日期) from dbo.学生 where 姓名='王非') 试试看!!
------其他解决方案--------------------
楼上的方法都可以 +1
------其他解决方案--------------------
select dateDiff(year,'1986-10-10',getdate()) 为啥不用SQL dateDiff日期函数呢
------其他解决方案--------------------
嗯嗯,六楼的说的是,新手新手啊