大哥大姐阿姨叔叔们:
      我现在有一个表aa,里面只有一个datetime类型的字段,我现在想判断此时间是否是本月表结构如下:
      mydate
      20090212
       20090215
  20100101
   20100108
  20100113
我现在是这样写的select mydate from aa where substring(convert(varchar(20),getdate(),120),0,8)=substring(convert(varchar(20),mydate,120),0,8)现在是1月份结果数据:mydate
20100101
   20100108
  20100113
想问一下,有没有简单的方法,来判断是本月,谢谢还有一个问题:declare @mm varchar(30)
select @mm=substring(convert(varchar(20),getdate(),120),0,8)
print(@mm)
exec(@mm)
为什么报'2010' 附近有语法错误呢??

解决方案 »

  1.   


    --本月数据:
    select * from aa where datediff(mm,mydate,getdate())=0
      

  2.   

    datediff(month,mydate,getdate())=0
      

  3.   


    declare @mm varchar(30) 
    select @mm=substring(convert(varchar(20),getdate(),120),0,8) 
    print(@mm) 
    exec(@mm) 
    --------------
    你这里的@mm是个字符串。根本就不是合法的SQL语句。怎么能够使用exec动态执行呢?
    @mm的值是2010-01
    exec(@mm)的意思就好比直接去执行 2010-01
    这个什么都不是,语法也谈不上符合。当然错了
      

  4.   

    SELECT * FROM TB WHERE CONVERT(CHAR(6),TIME,112)=CONVERT(CHAR(6),GETDATE(),112)
      

  5.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-16 16:31:14
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#A
    if object_id('tempdb.dbo.#A') is not null drop table #A
    go 
    create table #A([mydate] datetime)
    insert #A
    select '20090212' union all
    select '20090215' union all
    select '20100101' union all
    select '20100108' union all
    select '20100113'
    --------------开始查询--------------------------SELECT * FROM #A WHERE 
    CONVERT(CHAR(6),CONVERT(DATETIME,mydate),112)=
    CONVERT(CHAR(6),GETDATE(),112)
    ----------------结果----------------------------
    /* (所影响的行数为 5 行)mydate                                                 
    ------------------------------------------------------ 
    2010-01-01 00:00:00.000
    2010-01-08 00:00:00.000
    2010-01-13 00:00:00.000(所影响的行数为 3 行)
    */
      

  6.   

    DateDiff 函数不是
    返回两个日期之间的时间间隔。
      

  7.   

    declare @mm varchar(30) 
    select @mm=substring(convert(varchar(20),getdate(),120),1,7) 
    print(@mm) 
    exec('SELECT '''+@mm+'''')/*
    2010-01
            
    ------- 
    2010-01
      

  8.   

    select * from aa where datediff(m,getdate(),mydate)=0
      

  9.   

    datediff,返回两个日期的差
    datediff(单位,日期1,日期2)
    获取日期2与日期1的差。单位为第一个参数。
    yy为年
    mm为月
    dd为天
    hh为时
    mi为分
    ss为秒
    ms为毫秒
      

  10.   

    DATEPART部分不同,可以返回年,月,日,...
      

  11.   

    所以我想如果有一个日期是20091223
    当前日期是20100101,这么写
    select*from aawheredatediff(mm,mydate,getdate())=0 
    不是把20091223的也返回了吗???
    我理解的对吗???
      

  12.   


    DATEPART
    返回代表指定日期的指定日期部分的整数。语法
    DATEPART ( datepart , date ) 参数
    datepart是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。日期部分 缩写 
    year yy, yyyy 
    quarter qq, q 
    month mm, m 
    dayofyear dy, y 
    day dd, d 
    week wk, ww 
    weekday dw 
    Hour hh 
    minute mi, n 
    second ss, s 
    millisecond ms 
      

  13.   

    datediff(m,getdate(),mydate)=0 求的是两个时间月份差距,为0则为本月,否则,反之
      

  14.   

    是月,
    SELECT DATEDIFF(MM,'20091223','20100101')
                
    ----------- 
    1(所影响的行数为 1 行)自己试试就知道