`

巧用decode() 和 sign()比较大小求最大最小

阅读更多

巧用decode() sign()

 

简单回顾一下这两个函数


1.DECODE(exp,s1,r1,s2,r2..s,r)


2.sign(exp) 判断正负数的,如果exp为负数则返回-1,为正数则返回1,为0则返回0exp可以为number也可以为表达式。
这两个函数都是非常重要的函数也是比较常用的函数,估计大家都已经用过n次了,但是如果把这两个函数结合起来使用就能帮我们完成between and 的功能。
1.a b c三个变量去实验b在这三个数中的位置(顺序)

SQL> var a number;
SQL> var b number;
SQL> var c number;
SQL> exec :a:=1;:b:=2;:c:=3;

PL/SQL
过程已成功完成。

SQL> select decode(sign(:b-:c)+sign(:b-:a),-2,'
最小',-1,'小于等于',0,'中间',1,'
大于等于',2,'最大
') from dual;

DECODE(S
--------
中间


SQL> exec :a:=4;:b:=2;:c:=3;
                             ;
PL/SQL
过程已成功完成。

SQL> select decode(sign(:b-:c)+sign(:b-:a),-2,'
最小',-1,'小于等于',0,'中间',1,'
大于等于',2,'最大
') from dual;

DECODE(S
--------
最小


SQL> exec :a:=1;:b:=2;:c:=-1;
                             ;
PL/SQL
过程已成功完成。

SQL> select decode(sign(:b-:c)+sign(:b-:a),-2,'
最小',-1,'小于等于',0,'中间',1,'
大于等于',2,'最大
') from dual;

DECODE(S
--------
最大


SQL> exec :a:=2;:b:=2;:c:=3;
                             ;
PL/SQL
过程已成功完成。

SQL> select decode(sign(:b-:c)+sign(:b-:a),-2,'
最小',-1,'小于等于',0,'中间',1,'
大于等于',2,'最大
') from dual;

DECODE(S
--------
小于等于


SQL> exec :a:=1;:b:=2;:c:=2;
                             ;
PL/SQL
过程已成功完成。

SQL> select decode(sign(:b-:c)+sign(:b-:a),-2,'
最小',-1,'小于等于',0,'中间',1,'
大于等于',2,'最大
') from dual;

DECODE(S
--------
大于等于


SQL>
可见
sign(:b-:c)+sign(:b-:a)=-2
b为三个数中最小,
sign(:b-:c)+sign(:b-:a)=-1
b等于其中一个,小于另一个,
sign(:b-:c)+sign(:b-:a)=0
b为三个数中中间的一个,
sign(:b-:c)+sign(:b-:a)=1
b等于其中一个,大于另一个,
sign(:b-:c)+sign(:b-:a)=2
b为三个数中最大,
这样实现between and 的功能就非常简单了
b between a and c
就等价于 decode(sign(:b-:c)+sign(:b-:a),0,XXX,-1,XXX,1,XXX).
也可以实现判断某个日期是否在某个时间段之间

select decode(sign(months_between(sysdate,sysdate-1)),1,XXX,0,XXXX,1,XXXX) from dual;
做这个简单的实验与大家share,多指教。
可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。

 

 

select decode(:b,least(:a,:b,:c),'最小',GREATEST(:a,:b,:c),'最大','中间')
from dual

不过还要考虑一下b ac相等的情况,就不是最大最小

 

随着CASE的出现,一切都失去了意义。
SIGN方法只能用于数字,字符串比较还得靠LEAST, GREATEST

分享到:
评论

相关推荐

    关于decode函数的使用

    `decode()`函数还可以与其他函数结合使用,例如`nvl()`和`sign()`函数。 - **`nvl()`函数**:用于处理`NULL`值。如果第一个参数为`NULL`,则返回第二个参数;否则返回第一个参数的值。示例: ```sql SELECT NAME,...

    Oracle中Decode()函数的有关用法

    `DECODE()`函数可以结合其他函数一起使用,例如`SIGN()`函数,以实现比较两个数值的大小。 ```sql SELECT DECODE(SIGN(变量1 - 变量2), -1, 变量1, 变量2) FROM dual; ``` 这里,`SIGN(变量1 - 变量2)`用于比较两...

    decode函数.docx

    这条语句比较变量1和变量2的大小,并返回较小的那个值。 decode 函数也可以与其他函数结合使用,例如 LPAD 函数,可以实现一些复杂的字符串处理,例如: ```sql SELECT LPAD(DECODE(COUNT(记录编号),0,1,MAX(TO_...

    SQL语句的DECODE和NVL

    本文将详细介绍 DECODE 和 NVL 函数的使用方法和实践应用。 一、DECODE 函数 DECODE 函数是 Oracle 公司独家提供的功能,它是一个功能很强的函数,可以实现复杂的逻辑判断和数据处理。DECODE 函数的语法如下: ...

    Oracle-Decode()函数和CASE语句的比较

    Oracle数据库中的`Decode()`函数和`CASE`语句都是用于条件判断和数据转换的重要工具,它们各有特点,适用场景也有所不同。以下是对这两个功能的详细比较。 首先,`Decode()`函数是一个简化的条件表达式,它允许你在...

    关于oracle decode函数的用法

    在这个例子中,DECODE函数被用来将学生的ID转换为年级名称,并且通过`SUM`和`DECODE`组合使用,实现按科目汇总学生成绩。`DECODE(kname, 'yu', score, 0)`会检查`kname`字段是否为'yu'(代表语文),如果是,则返回`...

    decode函数[归类].pdf

    例如,使用`sign()`函数可以实现大于、小于或等于的比较。在示例中,对于工资调整的问题,DECODE函数可以这样使用: ```sql SELECT DECODE(SIGN(salary - 8000), >=0, salary * 1.15, -- 工资在8000元以上,加15% ...

    python decode()和encode()函数详解

    decode和encode是他们之间的转化函数 大致的过程如下 decode encode str --> str(Unicode) --> str decode()方法语法: str.decode(encoding=‘UTF-8’,errors=‘strict’) 参数: encoding – 要使用的编码...

    js实现urlncode 和urldecode

    js实现urlncode 和urldecode

    DECODE

    字体在计算机中是重要的视觉元素,它们决定了文本的样式、形状和大小。在数字环境中,字体通常以各种格式存在,如TrueType(.ttf)、OpenType(.otf)或Web字体(.woff, .woff2等)。这些字体文件包含了描述字符形状...

    urlencode urldecode实现

    在Xcode中,如果你的项目是用C++编写,但又需要与Objective-C或Swift代码混编,可以使用桥接头文件(.h)来实现接口的互通。对于 `urlencode` 和 `urldecode`,你可能需要自定义C++函数来实现这些功能,然后在C++...

    Oracle中Decode()函数使用技巧

    这个例子中,如果`column`是NULL,先用`'default'`替换,然后进行Decode()判断。 6. **在聚合函数中使用**: Decode()函数也可用于GROUP BY、HAVING和ORDER BY子句中,帮助对分组或排序进行条件判断。例如: ```...

    hw_decode_linuxffmpeg_hw_decode_linuxffmpegmp4_vaapi硬件解码_源码

    intel graphics hd 630显卡已有硬件解码功能,linux平台下如何使用硬件解码呢?1.安装ffmpeg2.安装显卡驱动3.编译hw_decode.c #gcc -o hw_decode hw_decode.c -I/.../include -L/.../lib -lavformat -lavfilter -...

    JS的encodeURI和java的URLDecoder.decode使用介绍

    如果不想在url中看到有明文,比如http://localhost:8080/template_1/login.action?user=张三 可以使用js的encodeURI的URLDecoder.decode一起使用一起来把url加密下 (1)JS在页面上把数据var val = encodeURI...

    decode 加入clickhouse库之前代码

    可以考虑使用预编译的哈希表(如`std::unordered_map`)加速查找,或者使用内联函数和模板来减少函数调用开销。 7. **测试**:编写单元测试以确保`decode`函数在各种边缘情况和常见用例下都能正常工作,这包括正确...

    eclipse decode plugin jad

    它包含了JAD的执行文件和必要的库,使得用户可以在Windows环境下运行和使用JAD进行反编译工作。安装这个插件通常需要解压缩zip文件,然后将解压后的文件放到Eclipse的plugins目录下,以便Eclipse能够识别和加载。 ...

    jwt-decode.js

    JWT(JSON Web Token)是一种轻量级的身份验证和授权机制,广泛应用于Web应用、API接口的安全认证。jwt-decode.js是一个...理解JWT的工作原理和jwt-decode.js的使用方法,对于构建安全的认证和授权系统至关重要。

    用JavaScript实现PHP的urldecode/urldecode函数

    这个是 utf-8版本的 js实现 php的 urlencode() 和 urldecode()两个函数的功能。 在传送cookie的时候 在 php端实现 url编码 但要用 js来解码cookie的时候 就出现汉字不能不能识别的问题 这个 js 很好的解决

Global site tag (gtag.js) - Google Analytics