当前位置: 首页 > news >正文

[Oracle] SIGN()函数

SIGN() 是 Oracle 中用于判断数值符号的函数,它返回一个数值的符号指示值

SIGN()函数的主要功能是判断输入数值的符号,返回以下三种可能值:
1:当输入为正数时
0:当输入为零时
-1:当输入为负数时

语法格式

SIGN(n)

参数说明
n:要检查符号的数值表达式(可以是列、计算值或函数结果)

示例

-- 零测试
SELECT SIGN(0) FROM dual;  -- 0-- 正数测试
SELECT SIGN(12) FROM dual;  -- 1
SELECT SIGN(3.14159) FROM dual;  -- 1-- 负数测试
SELECT SIGN(-12) FROM dual;  -- -1
SELECT SIGN(-0.0001) FROM dual;  -- -1
SELECT SIGN(NULL) FROM dual;  -- NULL-- SIGN()函数结合NVL()函数处理NULL
SELECT account_id,SIGN(NVL(balance, 0)) AS balance_sign
FROM accounts;

提示Tips:SIGN()函数对NULL的处理(如果输入为NULL,结果返回NULL)

-- 将账户余额分类
-- 结果示例:
-- ACCOUNT_ID  BALANCE  BALANCE_STATUS
-- 1001        500.00   盈余
-- 1002        0.00     平衡
-- 1003        -200.00  透支
SELECT account_id,balance,CASE SIGN(balance)WHEN 1 THEN '盈余'WHEN 0 THEN '平衡'WHEN -1 THEN '透支'END AS balance_status
FROM accounts;-- 比较实际销售额与目标销售额
-- 结果示例:
-- PRODUCT_ID  ACTUAL_SALES  TARGET_SALES  DIFFERENCE  PERFORMANCE
-- P001        1200         1000          200         1
-- P002        800          1000          -200        -1
-- P003        1000         1000          0           0
SELECT product_id,actual_sales,target_sales,actual_sales - target_sales AS difference,SIGN(actual_sales - target_sales) AS performance
FROM sales_data;

SIGN()函数在WHERE子句中使用

-- 查找所有透支账户
SELECT account_id, balance
FROM accounts
WHERE SIGN(balance) = -1;-- 查找所有非负库存
SELECT product_id, stock_quantity
FROM inventory
WHERE SIGN(stock_quantity) >= 0;

SIGN()函数与CASE表达式结合使用

-- 统计销售业绩情况
SELECT COUNT(*) AS total_products,SUM(CASE WHEN SIGN(actual_sales - target_sales) = 1 THEN 1 ELSE 0 END)  AS above_target,SUM(CASE WHEN SIGN(actual_sales - target_sales) = -1 THEN 1 ELSE 0 END) AS below_target,SUM(CASE WHEN SIGN(actual_sales - target_sales) = 0 THEN 1 ELSE 0 END)  AS on_target
FROM sales_data;-- 实现分段函数
SELECT x,CASE WHEN SIGN(x) = 1 THEN x*xWHEN SIGN(x) = -1 THEN -xELSE 0END AS function_value
FROM math_values;

SIGN()函数与其他函数结合使用

-- 计算绝对值的符号表示
SELECT number_value,SIGN(number_value) AS sign,ABS(number_value) AS absolute_value,SIGN(number_value) * ABS(number_value) AS original_value
FROM numbers_table;
http://www.xdnf.cn/news/1253629.html

相关文章:

  • 大数据存储域——Hive数据仓库工具
  • 第14届蓝桥杯Scratch_选拔赛_初级及中级(STEMA)真题2022年12月18日
  • 碰撞问题的分析
  • 链式数据结构
  • 基于最大似然估计的卡尔曼滤波与自适应模糊PID控制的单片机实现
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕
  • 【图像处理基石】浅谈3D城市生成中的数据融合技术
  • 从零开始用 Eclipse 写第一个 Java 程序:HelloWorld 全流程 + 避坑指南
  • 如何设计一个开放授权平台?
  • 用 “私房钱” 类比闭包:为啥它能访问外部变量?
  • 【AI智能编程】Trae-IDE工具学习
  • vector使用模拟实现
  • 排序算法(二)
  • Qt-桌面宠物
  • win10/11网络防火墙阻止网络连接?【图文详解】防火墙阻止连接网络的解决方法
  • Unity 调节 Rigidbody2D 响应速度的解决方案【资料】
  • GPT-OSS-20B vs Qwen3-14B 全面对比测试
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • K8S的POD数量限制
  • harbor仓库搭建(配置https)
  • 数据结构(4)
  • 时间轮算法
  • 【算法训练营Day21】回溯算法part3
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • DNS 服务器
  • 【golang】基于redis zset实现并行流量控制(计数锁)
  • 部署Web UI自动化测试平台:SeleniumFlaskTester
  • Maven入门到精通
  • Rust进阶-part5-trait
  • 机器学习——朴素贝叶斯