表中year、month是什么类型,还有@begin、@end怎么不用datetime而是varchar(50)?

解决方案 »

  1.   

    ALTER PROCEDURE sp_SelectDate
    @Begin varchar(50),
    @End varchar(50),
    @YTCode varchar(50)
    AS
    SELECT * 
    FROM [Table]
    where
    datediff(month,dateadd(month,[month]-1,dateadd(year,[year]-1900,0)),@Begin)>0
    and 
    datediff(month,dateadd(month,[month]-1,dateadd(year,[year]-1900,0)),@End)<0
      

  2.   

    --上面的要求@begin/@end是YYYYMMDD的格式--如果@begin/@end是YYYYMM的格式,则用:
    ALTER PROCEDURE sp_SelectDate
    @Begin varchar(50),
    @End varchar(50),
    @YTCode varchar(50)
    AS
    SELECT * 
    FROM [Table]
    where
    datediff(month,dateadd(month,[month]-1,dateadd(year,[year]-1900,0)),@Begin+'01')>0
    and 
    datediff(month,dateadd(month,[month]-1,dateadd(year,[year]-1900,0)),@End+'01')<0
      

  3.   

    year/month是什么类型?
    -----------------------
    都是varchar,是两个独立的字段,想组合查询,可不行。第二种方法优先比较月份,对年份比较无效。
    表中year、month是什么类型,还有@begin、@end怎么不用datetime而是varchar(50)?
    ------------------------------------
    写的存贮过程,和表的year,month字段对应,第二个村出国城是这样的:
    ALTER PROCEDURE sp_SelectDateSpare
    @BeginYear varchar(50),
    @BeginMonth varchar(50),
    @EndYear varchar(50),
    @EndMonth varchar(50),
    @YTCode varchar(50)
    AS
    SELECT * 
    FROM YT_Summary
    WHERE 
    YT_Summary.cYear >= @BeginYear 
    AND 
    YT_Summary.cMonth >= @BeginMonth 
    AND 
    YT_Summary.cYear <= @EndYear 
    AND 
    YT_Summary.cMonth <= @EndMonth 
    AND ytcode = @YTCode
      

  4.   

    谢谢啊!
    可是用 zjcxc(邹建) 的第二种方法 把变量换成了200401和200501在查询分析器里测了一下,检索不到应得的数据。SELECT * 
    FROM YT_Summary
    where
    datediff(month,dateadd(month,[cMonth]-1,dateadd(year,[cYear]-1900,0)),200401+'01')>0
    and 
    datediff(month,dateadd(month,[cMonth]-1,dateadd(year,[cYear]-1900,0)),200501+'01')<0
      

  5.   

    回复人: victorycyz(中海) ( ) 信誉:114  2004-11-10 12:04:00  得分: 0  
     
     
       解决方法: 一、表中字段与存储过程中的变量改用合理的数据类型。二、比较运算中转换成日期型进行比较,不要以字符型直接比较。-----------------------------------------------------------------
    这个客户管理的时候想出月表,不用日,所以只要求输入年、月。20040101和20050101这种格式是可以的,可在存贮过程中怎么加上日呢?然后再和在输入的时候加了日期的比较就行,不过直接比较年+月咋不行呢。
      

  6.   

    --晕,照我的写法,是你那样加的吗? 你怎么能不区分参数类型呢?--你定义的是字符型的参数,所以直接带变量值到查询语句中,应该是执行这样的查询语句
    SELECT * 
    FROM YT_Summary
    where
    datediff(month,dateadd(month,[cMonth]-1,dateadd(year,[cYear]-1900,0)),'200401'+'01')>0
    and 
    datediff(month,dateadd(month,[cMonth]-1,dateadd(year,[cYear]-1900,0)),'200501'+'01')<0
      

  7.   

    还是建议建表时就把日期和时间都定为varchar以后查询起来也方便!
      

  8.   

    回复人: hglhyy(查無此人) ( ) 信誉:100  2004-11-10 12:59:00  得分: 0  
     
     
       还是建议建表时就把日期和时间都定为varchar以后查询起来也方便!
      
     
    -------------------------------
    年和日是两个单独的字段,是Varchar的。本来以为挺简单的,没想到这么麻烦。
      

  9.   

    好了,还是自己的第一种办法,一点都不难,价个“=”号就好了,晕@_@SELECT * 
    FROM YT_Summary
    WHERE YT_Summary.cYear + YT_Summary.cMonth >= 200501 AND YT_Summary.cYear + YT_Summary.cMonth <= 200501
      

  10.   

    :) 久闻zjcxc(邹建) 大名,翻页的存贮过程广为流传,多谢各位大虾:)