T-SQL日期差异大于整数

时间:2015-08-22 04:17:33

标签: sql sql-server tsql

我有两张桌子:名字和生日。我需要获得超过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:更改了生日日期。

4 个答案:

答案 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