关于数据库(MYSQL)时间段的拆分问题,怎么样编程实现

关于数据库(MYSQL)时间段的拆分问题,怎么样编程实现,第1张

可以看下时间函数

对日期时间进行加减法运算

 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数

 date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释

 [type值 含义 期望的expr格式]:

 SECOND 秒 SECONDS

 MINUTE 分钟 MINUTES

 HOUR 时间 HOURS

 DAY 天 DAYS

 MONTH 月 MONTHS

 YEAR 年 YEARS

 MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"

 HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"

 DAY_HOUR 天和小时 "DAYS HOURS"

 YEAR_MONTH 年和月 "YEARS-MONTHS"

 HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"

 DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"

 DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"

 expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)

 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)

 如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)

mysql> SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND;

-> 1998-01-01 00:00:00

mysql> SELECT INTERVAL 1 DAY "1997-12-31";

-> 1998-01-01

mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;

-> 1997-12-31 23:59:59

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);

-> 1998-01-01 00:00:00

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);

-> 1998-01-01 23:59:59

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);

-> 1998-01-01 00:01:00

mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);

-> 1997-12-30 22:58:59

mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);

-> 1997-12-30 14:00:00

mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

-> 1997-12-02

mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");

-> 1999

mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");

-> 199907

mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

-> 20102

TO_DAYS(date)

 返回日期date是西元0年至今多少天(不计算1582年以前)

mysql> select TO_DAYS(950501);

-> 728779

mysql> select TO_DAYS('1997-10-07');

-> 729669

FROM_DAYS(N)

 给出西元0年至今多少天返回DATE值(不计算1582年以前)

mysql> select FROM_DAYS(729669);

-> '1997-10-07'

本文来自CSDN博客,转载请标明出处:>

with sleest as(

    select 1 rn,1111111111  a, 1 b, 'c1' c ,'d1' d from dual

     union all

    select 2,222222 , 3 , 'c2' ,'d2' from dual

)

--select  from sleest;

select distinct

       --new_rn第一条存值,后续为空

       case when levelscolumn_value >1 then null else trn end as new_rn,  

       trn,

       levelscolumn_value as sub_order,  

       --4可以通过参数传递

       trim(regexp_substr(ta, '({1,4})', 1, levelscolumn_value))  as a,  

       tb,

       --c第一条存值,后续为空

       case when levelscolumn_value >1 then null else tc end as c ,

       td

  from sleest t,

       table(

         cast(

           multiset(

             --4可以通过参数传递

             select level from dual connect by  level <= length(regexp_replace(trim(regexp_replace(ta,'({4})','\1 ')), '[^ ]+'))  + 1

           ) as sysOdciNumberList

         )

        ) levels

order by rn, sub_order

构造临时数据:

根据需求参数4进行划分:

参考stackover上的一个解决方案改的,原文地址如下:

>

SELECT REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 1),

       REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 2),

       REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 3),

       DECODE(REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 5), NULL, NULL, REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 4)),

       DECODE(REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 5), NULL, REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 4), REGEXP_SUBSTR(tPATH_IDS||',', '[^,]+', 1, 5))

FROM 机构层级关系表 t

前三列根据正则匹配,获取对应的分割后的值,没有啥讲的,

第四列要判断是否存在第五列,如果不存在,则第四列要空,存在则用第四列的值

第五列要判断是否存在第五列,如果不存在,则给第四列的值,存在则用第五列的值

以上就是关于关于数据库(MYSQL)时间段的拆分问题,怎么样编程实现全部的内容,包括:关于数据库(MYSQL)时间段的拆分问题,怎么样编程实现、拆车坊携手博奇 共建汽车拆解大数据、oracle数据库,结果集拆分重构。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10146002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存