Oracle 想要对数据进行取整吗

Oracle 想要对数据进行取整吗,oracle,Oracle,我的问题是: SELECT TO_CHAR((to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+ (level-1)),'DD-MM-YYYY'), TO_CHAR(to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS') + level,'DD-MM-YYYY') , to_number(regexp_substr('7000 T

我的问题是:

SELECT TO_CHAR((to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+ (level-1)),'DD-MM-YYYY'),
        TO_CHAR(to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')      + level,'DD-MM-YYYY') ,      
        to_number(regexp_substr('7000 T', '^\d+'))/(TO_DATE('04-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS') - TO_DATE('01-01-2018 00:00', 'DD-MM-YYYY HH24:MI:SS'))
        || regexp_substr('7000 T', '[A-Z]') AS IP_PLAN      
        FROM dual
        CONNECT BY level <= to_date('04-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')-to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS');
选择至字符((至日期('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+(一级)),'DD-MM-YYYY'),
至字符(至日期('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+级别,'DD-MM-YYYY'),
截止日期('04-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')-截止日期('01-01-2018 00:00','DD-MM-YYYY HH24:MI:SS'))
||regexp_substr('7000 T','A-Z]')作为IP_计划
来自双重
“按级别连接”舍入('7000 T'),“[A-Z]”)
正在尝试舍入字符串值,即从该源字符串提取的
T
,这没有意义

您需要对之前生成的数字进行四舍五入:

select to_char(to_date('01-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS') + level - 1,
         'DD-MM-YYYY'),
       to_char(to_date('01-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS') + level,
         'DD-MM-YYYY') ,      
       round(
         to_number(regexp_substr('7000 T', '^[[:digit:]]+'))
           / (to_date('04-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS')
               - to_date('01-01-2018 00:00', 'DD-MM-YYYY HH24:MI:SS'))
       )
       || regexp_substr('7000 T', '[^[:digit:]]*$') as ip_plan_consumption      
from dual
connect by level <= to_date('04-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS')
    - to_date('01-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS');

TO_CHAR(TO TO_CHAR(TO IP_PLAN_CONSUMPTION                       
---------- ---------- ------------------------------------------
01-01-2018 02-01-2018 2333 T                                    
02-01-2018 03-01-2018 2333 T                                    
03-01-2018 04-01-2018 2333 T                                    
然后将
T
附加在wards之后

我已经稍微改变了正则表达式的模式,所以它会在结尾处拾取空格和任何字符。这是对该字符串中可能的值进行一些假设,即它总是一个数字后跟一个非数字部分


顺便说一句,如果使用固定日期,则使用日期文字更简单:

select to_char(date '2018-01-01' + level - 1, 'DD-MM-YYYY'),
       to_char(date '2018-01-01' + level, 'DD-MM-YYYY') ,      
       round(
         to_number(regexp_substr('7000 T', '^[[:digit:]]+'))
           / (date '2018-01-04' - date '2018-01-01')
       )
       || regexp_substr('7000 T', '[^[:digit:]]*$') as ip_plan_consumption      
from dual
connect by level <= date '2018-01-04' - date '2018-01-01';
选择至字符(日期'2018-01-01'+级别-1,'DD-MM-YYYY'),
至_char(日期“2018-01-01”+级别“DD-MM-YYYY”),
圆的(
to_编号(regexp_substr('7000 T','^[:digit:]+'))
/(日期“2018-01-04”-日期“2018-01-01”)
)
||将regexp_substr('7000 T','[^[:digit:]*$)作为ip_计划消耗
来自双重
按级别连接<代码>选择至字符((至日期('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+(级别1)),'DD-MM-YYYY'),
至字符(至日期('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+级别,'DD-MM-YYYY'),
四舍五入(到编号(regexp\u substr('7000 T','^\d+')/(到日期('04-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')-到日期('01-01-2018 00:00','DD-MM-YYYY HH24:MI:SS')),0)
作为IP_计划_消耗
来自双重

按级别连接您能告诉我们您已经尝试了什么吗?您尝试过搜索吗?你已经知道你想做什么了,所以在文档中查找一个具有该名称的函数似乎是一个很好的起点。我也使用它,to_number(regexp_substr('7000 T','^\d+')/(to_DATE('04-01-2018 00:00:00','DD-MM-yyyyy HH24:MI:SS')-to_DATE('01-01-2018 00:00','DD MM-yyyyyyyyyyy h24:MI:SS'))| regexp substr(round:SS')(('7000 T'),'[A-Z]')作为IP_计划_消耗量…但不起作用@Alex Poolet返回一个字符串,您不能对其进行舍入,也不能对其进行舍入,因为它包含字符串!!!
round(7000 / 3) => round(2333.333...) => 2333
select to_char(date '2018-01-01' + level - 1, 'DD-MM-YYYY'),
       to_char(date '2018-01-01' + level, 'DD-MM-YYYY') ,      
       round(
         to_number(regexp_substr('7000 T', '^[[:digit:]]+'))
           / (date '2018-01-04' - date '2018-01-01')
       )
       || regexp_substr('7000 T', '[^[:digit:]]*$') as ip_plan_consumption      
from dual
connect by level <= date '2018-01-04' - date '2018-01-01';
SELECT TO_CHAR((to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')+ (level-1)),'DD-MM-YYYY'),
        TO_CHAR(to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')      + level,'DD-MM-YYYY') ,      
        round(to_number(regexp_substr('7000 T', '^\d+'))/(TO_DATE('04-01-2018 00:00:00', 'DD-MM-YYYY HH24:MI:SS') - TO_DATE('01-01-2018 00:00', 'DD-MM-YYYY HH24:MI:SS')),0)
         AS IP_PLAN_CONSUMPTION      
        FROM dual
        CONNECT BY level <= to_date('04-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS')-to_date('01-01-2018 00:00:00','DD-MM-YYYY HH24:MI:SS');