日期:2014-05-18  浏览次数:21466 次

怎么给sql查询语句添加临时字段,方便列表显示
如题,每天产生一张表,但是表里只有时间字段,没有日期字段。直接用日期来命名的表。比如GSM_20120201,GSM_20120202,GSM_20120203..........根据下面的代码完全能查询出符合条件的信息。就是没有日期的显示,这几天的时间都列出来了。代码如下


declare @dt1 datetime,@dt2 datetime
declare @cellname varchar(30)
declare @sql nvarchar(4000)

set @dt1='2012-01-01'
set @dt2='2012-03-07'

set @cellname='nanliangAG1-1'


select @sql=isnull(@sql+' union all ','')
+'select * from '
+[name]
+' where cell_name like '''+@cellname+'%'''

from sysobjects

where type='U'
and [name] in (select [name] from (
select 'gsm_'+right(convert(varchar(8),dateadd(d,number,@dt1),112),8) as [name]
from master..spt_values
where type='p' and dateadd(d,number,@dt1)<=@dt2)t)

insert into temp exec(@sql)
select * from temp
select @sql






查询出来的是这样的。我想把每一张表的日期标注上,比如从20120104的表,从20120105的表,从201220120105的表。就是把那个表的后缀给加到一个临时字段上显示出来。
时间 小区 代码
2.0 nanliangAG1-1 2708
3.0 nanliangAG1-1 2708
4.0 nanliangAG1-1 2708
5.0 nanliangAG1-1 2708
6.0 nanliangAG1-1 2708
7.0 nanliangAG1-1 2708
8.0 nanliangAG1-1 2708
9.0 nanliangAG1-1 2708
10.0 nanliangAG1-1 2708
11.0 nanliangAG1-1 2708
12.0 nanliangAG1-1 2708
2.0 nanliangAG1-1 2708
3.0 nanliangAG1-1 2708
4.0 nanliangAG1-1 2708
5.0 nanliangAG1-1 2708


就是想显示成这样子
日期时间 时间 小区 代码
20120102 2.0 nanliangAG1-1 2708
20120102 3.0 nanliangAG1-1 2708
20120102 4.0 nanliangAG1-1 2708
20120102 5.0 nanliangAG1-1 2708
20120102 6.0 nanliangAG1-1 2708
20120102 7.0 nanliangAG1-1 2708
20120102 8.0 nanliangAG1-1 2708
20120102 9.0 nanliangAG1-1 2708
20120102 10.0 nanliangAG1-1 2708
20120102 11.0 nanliangAG1-1 2708
20120102 12.0 nanliangAG1-1 2708
20120103 2.0 nanliangAG1-1 2708
20120103 3.0 nanliangAG1-1 2708
20120103 4.0 nanliangAG1-1 2708
20120103 5.0 nanliangAG1-1 2708
20120103 6.0 nanliangAG1-1 2708
20120103 7.0 nanliangAG1-1 2708
20120103 8.0 nanliangAG1-1 2708
20120103 9.0 nanliangAG1-1 2708
20120103 10.0 nanliangAG1-1 2708





该怎么添加临时日期字段呢,谢谢,在线等。

------解决方案--------------------
SQL code

declare @dt1 datetime,@dt2 datetime
declare @cellname varchar(30)
declare @sql nvarchar(4000)

set @dt1='2012-01-01'
set @dt2='2012-03-07'

set @cellname='nanliangAG1-1'


select @sql=isnull(@sql+' union all ','')
+'select '''+right([name],8)+''' as data,* from '
+[name]
+' where cell_name like '''+@cellname+'%'''

from sysobjects 

where type='U' 
and [name] in (select [name] from (
select 'gsm_'+right(convert(varchar(8),dateadd(d,number,@dt1),112),8) as [name]
from master..spt_values 
where type='p' and dateadd(d,number,@dt1)<=@dt2)t)

insert into temp exec(@sql) 
select * from temp
select @sql