我有两张桌子:名字和生日。我需要获得超过18岁的人的姓名,但我无法手动输入日期。
UserID = int
Name = varchar(50)
Birthday = Date
UserID Name UserID Birthday
----------- -----------------
1 ABC 1 1997-05-15
2 DEF 2 1997-09-21
3 GHI 3 2011-02-01
我目前有这个:
select u.UserID
from tbl_Name as u
join tbl_Birthday as b on u.UserId=b.UserID
where Birthday < '1997-08-22';
我尝试将最后一行更改为以下内容但仍然无效:
where datediff(year, birthday, convert(date, getdate())) > 18;
where Birthday - convert(date,getdate()) > 18;
编辑:我在DATEDIFF中混淆了startdate和enddate,但这给了我18岁(1997年出生)的人的问题。
编辑2:通过指定无法手动输入日期,使问题更加明确。
编辑3:更改了生日日期。
答案 0 :(得分:0)
if ((userChoice != "rock") && (userChoice != "paper") && (userChoice != "scissors"))
{
console.log("Sorry but you didn't enter a valid option. Use all lowercase letters and no punctuation. But the computer will automatically assign you an object so you can still play");
userChoice = Math.random();
if (userChoice < 0.34) {
userChoice = "rock";
} else if(userChoice <= 0.67) {
userChoice = "paper";
} else {
userChoice = "scissors";
} console.log("Human: " + userChoice);
}
else
{
console.log("You chose: " + userChoice);
};
答案 1 :(得分:0)
如果您想尝试检索18岁以上的人,可以使用此查询。
where DATEDIFF(YEAR,birthday,GETDATE())>18
答案 2 :(得分:0)
不要在Birthday
列上进行日期数学运算。这需要计算表中每一行的表达式!相反,在平等或不平等的另一边做数学。
如果您的出生日期没有时间部分存储:
WHERE Birthday <= DateAdd(year, -18, GetDate)
如果他们存储的时间部分可以设置为午夜以外,按照惯例,一个人在生日那天是18岁,所以:
WHERE Birthday < DateAdd(year, -18, Convert(date, GetDate() + 1))
注意:在SQL Server中减去datetime
值会产生相隔天数,从而解释为什么您的某个表达式无法正常工作(您将其视为多年)。
答案 3 :(得分:0)
if( year((Cast (getdate() as date))-year(cast (BirthDay as date)))>18)
begin
select birthday
end