本帖最后由 herogxooo 于 2011-11-14 14:08:03 编辑

解决方案 »

  1.   

    要动态执行,PS9以上
    DO $$
    declare d int;
    declare d1 varchar(100);
    declare d2 varchar(100);
    declare d3 date;
    declare d4 date;
    begin
    d3:=date '2011-11-14';
    d1:='select date'''|| d3 ||'''';
    d:=(SELECT EXTRACT(DOW FROM d3))-1;
    d2:=d1 || '-INTERVAL ''' || d || ' day '' ';
    EXECUTE d2 into d4;
    RAISE NOTICE 'ok %',d4;
    end$$
      

  2.   

    没办法,PSQL中的格式是  date '2001-09-28' + interval -1 days ,没有那个引号。你可以直接把你的函数代入+ interval -to_number(to_char(a_time,'D')_ days 
      

  3.   


    我用的版本不一定会是9以上的,而且我是想直接在SQL中查询的时候查出来,有其它办法吗?
      

  4.   

    我用的版本不一定会是9以上的,而且我是想直接在SQL中查询的时候查出来,有其它办法吗?没有,编写1个SP OR 函数,再调用,用上述语句 动态执行
      

  5.   

    如果要表达式中嵌入变量, 必须用cast转换式, 而不是在前面加类型符, 前面加类型符只适合常量.
    如:
    date '2001-09-28' + cast ('-1'||to_char(a_time,'D')||' days' as interval)
      

  6.   

    校正一下:
    date '2001-09-28' + cast ('-'||to_char(a_time,'D')||' days' as interval)
      

  7.   

    SELECT date '2011-11-15' +cast(-1*(TO_NUMBER(to_char(DATE '2011-11-15','D'),'99')-2) ||' days' as interval)
      

  8.   


    谢谢啊,帮我解决问题了。不过WWWWA是最正确的,因为我问题里写的是周一。