select *
from tb
where date between left(@date,4) + '-1-1' and @date

解决方案 »

  1.   

    declare @date datetime
    set @date='2008-12-31'
    select rtrim(year(@date))+'-1'+'-1'
    /*                 
    ---------------- 
    2008-1-1(影響 1 個資料列)
    */
      

  2.   

    select * from tb where d between rtrim(datepart(yy,@date)) + '-1-1' and @d
      

  3.   

    服务器: 消息 296,级别 16,状态 3,过程 SP_IMP_YEARREPORT_BYBMJZ,行 44
    从 char 数据类型到 smalldatetime 数据类型的转换导致 smalldatetime 值越界。
    服务器: 消息 296,级别 16,状态 1,过程 SP_IMP_YEARREPORT_BYBMJZ,行 62
    从 char 数据类型到 smalldatetime 数据类型的转换导致 smalldatetime 值越界。
    语句已终止。
    语句已终止。
      

  4.   

    select * from tb where d between rtrim(datepart(yy,@date)) + '-1-1' and @date
      

  5.   

    --try
    smalldatetime-->datetime
    --or
    char-->varchar()
      

  6.   

    rtrim什么意思?我用year(@date)+'-1-1'为什么就不行呢?
      

  7.   

    rtrim 是去除空格
    year()返回类型int,要作类型转换..
      

  8.   


    去空格,并交数据转换成varchar类型,int类别不能和varchar类别的数据直接相加。