使用的是mysql
有这么系列表
a_1004
a_1005
a_1006
...
1004是10年4月这个月是4月,怎么写一条sql语句查询a_1004表中的,等到5月,可以查询a_1005表select concat("a_",(select substring(DATE_FORMAT(Date_add(now(), interval 0 day),'%Y%m'),3,4)));得到的是 a_1004怎么样可以查询 这个字符串为表名的表?谢谢,by phoenix

解决方案 »

  1.   

    set @aa=concat('select * from ',"a_",(select substring(DATE_FORMAT(Date_add(now(), interval 0 day),'%Y%m'),3,4)));
    prepare qq from @aa;
    execute qq;
      

  2.   

    MySQL 中SQL语句无法实现动态的使用表名做变量。只能通过PREPARE来实现动态SQL语句。SET @sql = concat(' select * from a_',DATE_FORMAT(now(),'%y%m'));
    PREPARE stmt FROM @sql;
    EXECUTE stmt1 ;
    DEALLOCATE PREPARE stmt1;
      

  3.   

    如果表中记录不多的话,则可以用select * from (
    select 1004 as m, * from a_1004
    union all
    select 1005 as m, * from a_1005
    union all
    select 1006 as m, * from a_1006
    ) where m=DATE_FORMAT(now(),'%y%m');或者效率高一些的select * from (
    select * from a_1004 where DATE_FORMAT(now(),'%y%m')=1004
    union all
    select * from a_1005 where DATE_FORMAT(now(),'%y%m')=1005
    union all
    select * from a_1006 where DATE_FORMAT(now(),'%y%m')=1006
    )