如:某人2001年02月28日入職,至今的年資(几年几月几日),SQL語句該怎麼寫?
越簡洁越好:)

解决方案 »

  1.   

    年资?SELECT DATEDIFF(MONTH,'2001-02-28',GETDATE())/12
      

  2.   

    select right(year(getdate()-'2001-01-01'),2) +'年'+
    ltrim(month(getdate()-'2001-01-01'))+'月'+
    ltrim(day(getdate()-'2001-01-01'))+'日'/*
    ---------------------------------- 
    05年9月9日(所影响的行数为 1 行)
    */
      

  3.   

    select right(year(getdate()-'2001-02-28')-1900,2) +'年'+
    ltrim(month(getdate()-'2001-02-28'))+'月'+
    ltrim(day(getdate()-'2001-02-28'))+'日'/*
                                       
    ---------------------------------- 
    5年7月13日(所影响的行数为 1 行)*/
      

  4.   

    select right(convert(varchar,dateadd(day,datediff(day,'2005-09-10',getdate()),'1900-01-01'),102),8)
      

  5.   

    To: xiaoku(小苦走了,小酷来了!) lxzm1001(*悠悠蓝星*) 
    你們給的語句得出的結果一樣,但計算出的結果不正確哦...2002-09-02 04.01.11  應該是:04.00.09
    2006-05-24 00.04.21  應該是:00.03.18
    2003-04-07 03.06.08  應該是:03.05.04
      

  6.   

    yowbell(拜托好心人牵条狗叼走我的良心,我想风光的活下去) ( ) 信誉:100    Blog  2006-09-11 09:39:00  得分: 0  
     
     
       看来是台湾的兄弟姐妹,仔细讲一讲!
      
    -----------非也..
    米辦法,公司用繁體系統-_-# 
      

  7.   

    declare @year int,@month int,@day int
    declare @time varchar(10)set @time = '2001-2-28'
    select @year = datediff(yy,@time,getdate())select @month = datediff(month,@time,getdate())-12*@year
    if(day(getdate())<day(@time))
      set @month = @month-1select @day = datediff(dd,dateadd(month,(12*@year+@month),@time),getdate())print cast(@year as varchar) + '年'+ cast(@month as varchar)+'个月'+cast(@day as varchar)+'天'
      

  8.   

    謝謝bzscs(沙虫 我爱小美),太棒了~~!!!如果這個入職日期是職員表employee中的一個字段"indate",而不是某一個日期時,要計算所有人的年資,你的語句又該怎麼寫呢?
      

  9.   

    indate不是一个日期格式么?
      

  10.   

    KasenHOo(深渊的水影) ( ) 信誉:100    Blog  2006-09-11 13:22:00  得分: 0  
     
     
       indate不是一个日期格式么?  
    -----------------------------
    偶這里不是,是一個字段名稱,代表某職員的入職日期 
      

  11.   

    呵呵,套出來了,新增了個表,還用了游標,有沒有更好的寫法?----------------------if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tmpemp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[tmpemp]
    GOCREATE TABLE [dbo].[tmpemp] (
    [empno] [char] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [indate] [datetime] NULL ,
    [timelong] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[tmpemp] WITH NOCHECK ADD 
    CONSTRAINT [PK_tmpemp] PRIMARY KEY  CLUSTERED 
    (
    [empno]
    )  ON [PRIMARY] 
    GOinsert into  tmpemp SELECT  empno,indate,''  from employee where flag=1
    declare @year int,@month int,@day int,@emp_no char(8),@time datetime
    declare cur02 cursor for 
    select empno,indate
       from tmpempopen cur02
    fetch next  from cur02 into @emp_no,@timewhile @@fetch_status<>-1
        begin
    select @year = datediff(yy,@time,getdate())
    if (month(getdate())<month(@time))
    set @year=@year-1 select @month = datediff(month,@time,getdate())-12*@year
    if(day(getdate())<day(@time))
      set @month = @month-1 select @day = datediff(dd,dateadd(month,(12*@year+@month),@time),getdate()) print  @emp_no+' ' +convert(varchar,@time,111) +'  ' +cast(@year as varchar) + '年'+ cast(@month as varchar)+'個月'+cast(@day as varchar)+'天'
    update tmpemp set timelong=cast(@year as varchar) + '年'+ cast(@month as varchar)+'個月'+cast(@day as varchar)+'天' where empno=@emp_nofetch next  from cur02 into @emp_no,@time  
    endclose cur02
    deallocate cur02select empno,indate,timelong as 年資 from tmpemp
      

  12.   

    可以做个函数呀create function [dbo].[calc_date](@time smalldatetime,@now smalldatetime)
    returns nvarchar(10)
    as
    begin
    declare @year int,@month int,@day intselect @year = datediff(yy,@time,@now)select @month = datediff(month,@time,@now)-12*@year
    if(day(@now)<day(@time))
      set @month = @month-1select @day = datediff(dd,dateadd(month,(12*@year+@month),@time),@now)return cast(@year as varchar) + '年'+ cast(@month as varchar)+'个月'+cast(@day as varchar)+'天'
    end
    godeclare @kk nvarchar(10)
    select @kk = [dbo].[calc_date]('2002-2-7',getdate())
    --select [dbo].[calc_date](indate,getdate()) from employee 
    print @kk