离职 和 注销为2个逻辑字段,用下面的语句查不出入厂时间大于2006-8-25的记录,真是太奇怪了,明明表中有许多条 离职 和 注销为空且大于2006-8-25的记录。是SQL的语法不对吗?
select * from 人事_名单 where 入厂时间>='2006-8-1' and 入厂时间<'2006-9-10' and not(离职 = '1') and not(注销 = '1')

解决方案 »

  1.   

    select 
        * 
    from 
        人事_名单 
    where 
        入厂时间>='2006-8-1' 
        and 
        入厂时间<'2006-9-10' 
        and 
        离职!='1'  -- 离职<>'1'
        and 
        注销!='1'  -- 注销<>'1'
      

  2.   

    select * 
    from 人事_名单 
    where 入厂时间>='2006-8-1' and 入厂时间<'2006-9-10' and 离职 <> '1') and 注销 <> '1'
      

  3.   

    个人觉得语句没有问题,
    但是最好写成
    select 
     * 
    from 
      人事_名单 
    where 
      入厂时间>='2006-8-1' 
      and 入厂时间<'2006-9-10' 
      and (not(离职 = '1'))
      and (not(注销 = '1'))
      

  4.   

    select * from 人事_名单 where 入厂时间>='2006-8-1' and 入厂时间<'2006-9-10' 
    and 离职 <> '1' 
    and 注销 <> '1'
      

  5.   

    有个问题,你确定入厂时间字段的格式是年-月-日?
    最好换成datediff函数而且是否为空应该是null判断吧?
    try一下
    select * from 人事_名单 where datediff(d,入厂时间,'2006-8-1')<=0 and datediff(d,入厂时间,'2006-9-10')>0
    and 离职 is null
    and 注销 is null