公司LOG表,按不同的月存在不同的表。现在要进行用户分析,问一下,在查询的时候如何读取不同的数据表?根据时间?

解决方案 »

  1.   

    如果把表名作为变量的情况下 需要使用动态语句
    例如 
    declare @t varchar ='tb201205'
    exec('select * from '+@t)
      

  2.   

    你在where里面使用convert(month,[日期列])='01'这样的就可以筛选到一月的数据,前提你的日期列要规范化。不然01-02-03这样格式就不知道你年月日是哪个了
      

  3.   

    DECLARE @a DATETIME ='2012-04-05',@b DATETIME ='2012-9-12'
    DECLARE @sql VARCHAR(MAX),@i INT ,@t DATETIME
    SET @i=0
    SET @t=DATEADD(mm,DATEDIFF(mm,0,@a),0)
    --SELECT @t
    WHILE @i<=DATEDIFF(mm,@a,@b)
    BEGIN 
    SELECT @sql=ISNULL(@sql+CHAR(10)+'union all'+CHAR(10),'')+'select * from tb'+CONVERT(VARCHAR(8),dateadd(mm,@i,@t),112)
    SET @i=@i+1
    END 
    --PRINT @sql
    /*
    select * from tb20120401
    union all
    select * from tb20120501
    union all
    select * from tb20120601
    union all
    select * from tb20120701
    union all
    select * from tb20120801
    union all
    select * from tb20120901* */
    EXEC (@sql)