首页 > 数据库 >postger平移oracle的function中涉及substr('float'*x,y,z)問題解決方案

postger平移oracle的function中涉及substr('float'*x,y,z)問題解決方案

时间:2023-03-14 14:24:01浏览次数:40  
标签:function postger substr text float 解決 oracle

背景:工作中需要將oracle中的function平移到postger中,在一個view中調用了該function,function中需要對浮點數相乘操作,然後在截取,在Aqua Data Studio中創建function能成功,但是創建view還是會失敗,報錯也是定位代該function,單獨調用該方法還是會報錯。我創建失敗原因,不知道substr方法在oracle與postger中的區別。

 

substr方法在oracle與postger中的區別

oracle中substr中第一個參數如果是int或者float類型的字符串相乘,會默認轉化成int或者float類型相乘,然後轉化字符串再截取,結果為‘2.’,但是postger不會幫你做這些,每一步都需要自己做。

select substr(('1.11'*2),1,2) as number from dual

 

postger中平移上面sql解決辦法

select substr(('1.11'::float*2)::text,1,2) number 

第1步需要將字符串1.11轉化成float類型(pg會識別字符串的類型,如果是整數應該是int類型,要對對應上);

第2步需要將相乘后的浮點數轉化成字符串類型,對應的是text

 

最終的oracle中方法平移到postger中的腳本

CREATE OR REPLACE FUNCTION "public"."FloatTimeToDateTime" (in PSTRINGTIME VARCHAR)
   RETURNs VARCHAR
AS'
  declare DateTime varchar(50);
BEGIN
  DateTime = (
    select hh || '':'' || mm || '':'' || substr((tt1::float * 60)::text, 1, 2)
    from (select hh,
                 substr((tt::float* 60)::text, 1, 2) mm,
                 ((tt::float* 60) - substr((tt::float* 60)::text, 1, 2)::float)::text tt1
            from (select substr((PSTRINGTIME::float* 24)::text, 1, 2) hh, 
                    ((PSTRINGTIME::float* 24) - substr((PSTRINGTIME::float* 24)::text, 1, 2)::float)::text tt
                    ) as t1
            ) as t2
    );
   RETURN replace(DateTime,''.'','''');
   --return  DateTime;
END'
language 'plpgsql'
View Code

 

标签:function,postger,substr,text,float,解決,oracle
From: https://www.cnblogs.com/wuzhengzheng/p/17214758.html

相关文章

  • Unpack and pass list, tuple, dict to function arguments in Python
    reprinted:note.nkmk.me-Unpackandpasslist,tuple,dicttofunctionargumentsinPythonInPython,youcanunpacklist,tuple,dict(dictionary)andpassits......
  • 【Azure Function App】在ADF(Azure Data Factory)中调用 Azure Function 时候遇见 Fa
    问题描述在ADF(AzureDataFactory)中,调用AzureFunctionApp中的Function,遇见了 FailedtogetMIaccesstokenTherewasanerrorwhilecallingendpointwitherr......
  • vba 过程(Sub、Function)
    过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。VBA具有四种过程:Sub过程、Function函数、Property属性过程和Event事件过......
  • MySQL创建函数报错:1418 - This function has none of DETERMINISTIC, NO SQL, or READ
    创建函数时报错:1418-ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wantto......
  • Study for Go ! Chapter three - Function
    StudyforGo!Chapterthree-FunctionInitialization函数是结构化编程的最小模块单元函数是代码复用和测试的基本单元关键字func无需前置声明不......
  • create_function()注入
    1.介绍一下php中create_function()函数。stringcreate_function(string$args,string$code)string$args是变量部分string$code是方法代码部分,就是要执行的语句......
  • mysql 执行function时问题处理
    简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或......
  • ABC275D-Yet-Another-Recursive-Function题解
    题目传送门题意:定义一个\(\mathbb{N}\to\mathbb{N}\)的函数\(f(x)=\begin{cases}1&x=0\\f(\lfloor\frac{x}{2}\rfloor)+f(\lfloor\frac{x}{3}\rfloor)&\text{otherwis......
  • Go special function
    initfunctioninit函数用来进行初始化,在每一个源文件里面的代码,init函数最开始执行init函数没有参数,同时也没有返回值anonymousfunction匿名函数,和javascript和dart......
  • ftrace之function及function_graph使用
    一用途(1)function主要用于跟踪内核函数的调用栈(其被调用过程)(2)function_graph主要用于跟踪内核函数内部调用流程及耗时这两个对内核性能分析的作用不大,主要用来梳理内......