一个ACCESS数据库,有个一个日期时间字段,我想通过SQL语句或其它办法取出其中的年月,如:2008-12-01 12:01:01 ,取出的是2008-12,但是,我这有个问题,也就是问题要解决的关键,我这个字段的天的是这样规定的:没有超过当天早八点整,算成是上一天,例如2008-12-01 07:55:01 按我的这个规则取,它就应该是2008-11如何能快速取出年月并能考虑这个规则?

解决方案 »

  1.   

    设时间字段为pDateselect convert(varchar(7),DATEADD(hour,-8,pdate),120) as m from Table1
      

  2.   

    用decode函数试试。对于那个规则,写个函数处理一下。
      

  3.   

    楼上两位说的似乎不是楼主要的,楼主要的是Access的还有一个时间上的判断SELECT str(DatePart("yyyy",c_date)) +"-"+ str(IIf(DatePart("h",c_date)>8,DatePart("m",c_date),DatePart("m",c_date)-1)) AS col
    FROM 表1;
      

  4.   


    SELECT Format(ftxd.txd-TimeSerial(7,59,59),'YYYY-MM') as myDay
    FROM ftxd;
      

  5.   

    但是是ACCESS数据库,convert无法执行
      

  6.   


    修改一下,上面的有问题
    SELECT IIf(DatePart("m",c_date)>8,Str(Year(c_date))+"-"+Str(Month(c_date)),Str(Year(DateAdd("d",-1,c_date)))+"-"+Str(Month(DateAdd("d",-1,c_date)))) AS 表达式1
    FROM 表1;
      

  7.   

    ACCESS不熟,给你写个ORACLE的~你借鉴一下select to_char(add_month(col1,-1),'yyyy-mm') from yourtable
      

  8.   

    佩服hongqi162 ,对得起四颗星,崇拜……
      

  9.   


    oracle 中这样才对
    select 
    case when to_char(col1,'hh')>8 then to_char(col1,'yyyy-mm') else to_char(col1-1,'yyyy-mm') end 
    from t1
      

  10.   

    你们搞得太复杂了。
    我提供的方法就是access测试通过的。
     楼主试过了吗?
      

  11.   

    to jmlei :真巧妙,利用时间偏移来得到值