如何根据日期获得精确年龄

时间:2016-11-08 07:34:28

标签: sql sql-server tsql

示例数据:

DECLARE @T Table (ID INT,Name VARCHAR(10),DOB DATE)
INSERT INTO @T (ID,Name,DOB) VALUES (1,'Mohan','1937-12-30')
INSERT INTO @T (ID,Name,DOB) VALUES (2,'Raj','1937-12-25')
INSERT INTO @T (ID,Name,DOB) VALUES (5,'Manny','1937-01-30')
INSERT INTO @T (ID,Name,DOB) VALUES (3,'kamal','1938-12-12')
INSERT INTO @T (ID,Name,DOB) VALUES (4,'Raj','1937-05-12')

我的查询:

Select 
cast((DATEDIFF(m, DOB, GETDATE())/12) as varchar) + ' Y & ' + 
       cast((DATEDIFF(m, DOB, GETDATE())%12) as varchar) + ' M & ' +
       cast((DATEDIFF(D, DOB, GETDATE())%12) as varchar) + ' d'   as Age from @T

这将产生年,月和日的结果。 但我的问题是如何获得仅在45天内达到79岁的数据。 我很震惊,你可以建议我吗

6 个答案:

答案 0 :(得分:1)

你可以这样做:

public class User : INotifyPropertyChanged
{
        public string UserName{get; set;}
        public string Password{get; set;}


       public UserAccount(string userName, string password)
       {
          UserName = userName;
          Password = password;
       }
 }

答案 1 :(得分:1)

在接下来的45天内达到79岁的人:

SELECT * from @T where
DOB > DATEADD(year,-79,GETDATE()) and
DOB < DATEADD(year,-79,DATEADD(day,45,GETDATE()))

(根据<<=进行调整,如果您希望将DATEADD缩短至午夜,则可以使用额外的DATEDIFF / GETDATE()确切的要求)

答案 2 :(得分:1)

procedure InitializeWizard;
begin
  ExtractTemporaryFile('tune.xm');
  if BASS_Init(-1, 44100, 0, 0, 0) then
  begin
    SoundStream := BASS_StreamCreateFile(False, 
      ExpandConstant('{tmp}\tune.xm'), 0, 0, 0, 0, 
      EncodingFlag or BASS_SAMPLE_LOOP);
    BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500);
    BASS_ChannelPlay(SoundStream, False);

    SoundCtrlButton := TNewButton.Create(WizardForm);
    SoundCtrlButton.Parent := WizardForm;
    SoundCtrlButton.Left := 8;
    SoundCtrlButton.Top := WizardForm.ClientHeight - 
      SoundCtrlButton.Height - 8;
    SoundCtrlButton.Width := 40;
    SoundCtrlButton.Caption :=
      ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}');
    SoundCtrlButton.OnClick := @SoundCtrlButtonClick;
  end;
end;

答案 3 :(得分:0)

这个怎么样?

...
WHERE  (DATEDIFF(m, DOB, GETDATE())/12) = 78 AND 
       (DATEDIFF(m, DOB, GETDATE())%12) = 11 AND  
       (DATEDIFF(D, DOB, GETDATE())%12) < 15  

答案 4 :(得分:0)

试试这个:     ;

WITH _CTE(_Id,_ConDate ,_Month , _Date ,Name , DOB,_DOBMonth , _DOBDate) AS
(SELECT ID , DATEADD(DAY,45,GETDATE()),DATEPART(M,DATEADD(DAY,45,GETDATE())),
DATEPART(DAY,DATEADD(DAY,45,GETDATE())),Name,DOB,DATEPART(MONTH,DOB),DATEPART(DAY,DOB)FROM @T WHERE (DATEDIFF(m, DOB, GETDATE())/12) = 78 )SELECT _Id Id,Name , DOB FROM _CTE WHERE _Month = _DOBMonth AND _Date = _DOBDate

答案 5 :(得分:-1)

怎么样,

[name]="label"