根据时间范围获取表名(table_prefix)

分表规则为:每月分两张表.1-15号为 table_prefix_Ym_1 ,16-31号为table_prefix_Ym_2 , 如:table_prefix_201903_1
<?php
/**
 * @purpose: 根据时间范围获取表名
 * @explain: 表名的分表规则是,每月分两张表,1-15号为 table_prefix_Ym_1 ,16-31号为table_prefix_2 , 如:table_prefix_201903_1
 * User: Chrdai
 * Date: 2019/3/5
 * Time: 18:08
 */

class TablePrefix
{
    /**
     * @const app调用记录表前缀
     */
    const PREFIX= ‘table_prefix_‘;

    /**
     * @purpose:获取指定时间范围内的app调用记录表
     * @param int|string $starttime 开始时间
     * @param int|string $endtime 结束时间
     * @return array $tables 指定时间范围内的应用程序记录表
     */
    public static function getTableByDateRange($starttime,$endtime)
    {
        $tables = [];
        if(!empty($starttime)){
            $start = is_numeric($starttime) ? date(‘Ymd‘,$starttime) : date(‘Ymd‘,strtotime($starttime));
        }
        if(!empty($endtime)){
            $end = is_numeric($endtime) ? date(‘Ymd‘,$endtime) : date(‘Ymd‘,strtotime($endtime));
        }
        if(!empty($start) && !empty($end)){
            $prev = floor($start / 100);
            $next = floor($end / 100);
            //开始时间小于等于结束时间范围内的表都房间$tables
            while ($prev <= $next){
                $tables[] = self::PREFIX . $prev. ‘_1‘;
                $tables[] = self::PREFIX . $prev. ‘_2‘;
                $prev = ($prev % 100 === 12) ? ((floor($prev/100)  + 1) * 100 +1) : $prev + 1; //对夸年的月份做特殊处理
            }

            //以15天为分界线,分上下月,去除重复的表
            if($start % 100 > 15){
                array_shift($tables);
            }
            if($end % 100 <= 15){
                array_pop($tables);
            }
        }
        return $tables;
    }
}
//获取表名
$tables = TablePrefix::getTableByDateRange(‘2019-03-05 12:00:00‘,‘2019-03-05 14:00:00‘);
//循环处理各个表中的数据
$table = array_shift($tables); // 首先拿出第一张表中的数据
while(true){
    __loop:

    //...... (每张表的业务逻辑)

    // 如果$tables中没有表了,则跳出循环,否则循环处理
    if(empty($tables)){
        break;
    }else{
        $table = array_shift($tables);
        goto __loop;
    }
}

`

原文地址:https://www.cnblogs.com/chrdai/p/10551175.html

时间: 2024-10-10 15:28:52

根据时间范围获取表名(table_prefix)的相关文章

oracle&amp;&amp;Sqlserver获取表名列名主键及数据类型

SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname, b.name as typename,a.length as length,a.scale as scale,a.prec as prec from syscolumns a,systypes b ,sysobjects c where a.xusertype=b.xusertype and a

SQLSERVER和ORACLE系统表获取表名 列名以及列的注释

在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又有所不同,具体如下: SQLSERVER数据库: 系统表: ---获取表的相关信息              select * from SYS.OBJECTS  (说明:name:表名 object_id:表的ID)  ---获取列的相关信息 select * from SYS.COLUMNS (

workflow GetListIdByName 获取表名

1.Assign   获取表的地址 和表名 2.HttpsendWithSuspend==HttpSend 3.ParseDynamicValue 4.GetDynamicValueProperties 控件写好后

Oracle 获取表名和某个表的所有列名

获取某用户下所有的表名: select table_name from user_tables order by table_name; 获取某用户下某个表的所有列名 where 语句中TABLE_NAME="表名"  表名必需大写: select column_name from user_tab_columns where Table_Name = 'EMP' order by column_name; 原文地址:https://www.cnblogs.com/xsdf/p/825

根据时间段和数据库表名的前缀获取表名

/**      * $stime 开始时间   $etime 结束时间  $table 表前缀      */     public function getcalltablename($starttime,$endtime,$tablename){              $startsj=strtotime($starttime);         $endsj=strtotime($endtime);                  $daynums=floor(($endsj-$s

获取表名

1.Use Dictionary static void findTables(Args _args) { Dictionary dictionary; TableId tableId; tableName tableName; ; dictionary = new Dictionary(); tableId = dictionary.tableNext(0); tableName = dictionary.tableName(tableId); while (tableId) { info(s

Mssql根据表名获取字段

根据表名获取表名.字段.描述和类型长度,正好有需要的朋友们可参考添加自需的字段,sql语句如下: 1 SELECT TableName = OBJECT_NAME(cols.object_id), ColumnsName = props.name, Description = props.value, Length=cols.max_length 2 FROM sys.columns cols inner JOIN sys.extended_properties props ON 3 props

MySQL获取Schema表名和字段信息

MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,UPDATE_TIME, CHECK_TIME from information_schema.TABLES where TABLE_SCHEMA='t_shop' ; 获取字段名 select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NUL

postgresql 获取所有表名、字段名、字段类型、注释

获取表名及注释: select relname as tabname,cast(obj_description(relfilenode,'pg_class') as varchar) as comment from pg_class c where  relkind = 'r' and relname not like 'pg_%' and relname not like 'sql_%' order by relname 过滤掉分表: 加条件 and relchecks=0 即可 获取字段名.