日期:2014-05-16  浏览次数:21042 次

求教简单sql查询动态表名
使用的是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


------解决方案--------------------
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;
------解决方案--------------------
MySQL 中SQL语句无法实现动态的使用表名做变量。只能通过PREPARE来实现动态SQL语句。

SQL code
SET @sql = concat(' select * from a_',DATE_FORMAT(now(),'%y%m'));
PREPARE stmt FROM @sql;
EXECUTE stmt1 ;
DEALLOCATE PREPARE stmt1;