ORACLE中的行数和小数

ops/2024/11/18 1:30:46/

TO_CHAR 函数的格式字符串中,#0 的作用如下:

# 表示可选数字位

  • 可选数字:如果数字在该位置上没有值(例如,数字是 123.4),那么这个位置可以不显示。例如:
    • 格式:#,##0.##
    • 数字 123.4 显示为 123.4
    • 数字 123 显示为 123
    • 数字 0 显示为 0,但没有小数部分。

0 表示必须显示的数字位

  • 必须显示:如果数字在该位置上没有值,则会用零代替,确保这个位置始终显示一个数字。例如:
    • 格式:#,##0.00
    • 数字 123.4 显示为 123.40(强制显示两位小数)。
    • 数字 123 显示为 123.00(同样强制显示两位小数)。
    • 数字 0 显示为 0.00(强制显示两位小数)。

示例总结

  • 使用 # 你可以得到更简洁的显示,不会显示多余的零。
  • 使用 0 可以确保始终看到数字,即使是零。

选择格式

  • 如果你希望保留小数并且强制显示两位小数,使用 #,##0.00
  • 如果你希望小数位根据实际值变化,可以使用 #,##0.##

ROW_NUMBER() OVER (ORDER BY FIRMID) AS “序号”, 这个和ROWNUM AS “序号”, 有什么区别啊

ROWNUMROW_NUMBER() 是 Oracle 数据库中用于生成行号的两种不同方法,它们之间有几个重要区别:

1. 生成时机

  • ROWNUM:

    • 在结果集生成之前计算。它是在查询结果集生成的过程中分配的行号。
    • 如果您对查询结果进行了排序,ROWNUM 将在排序之前分配行号,因此可能不会按照预期的顺序排列。
  • ROW_NUMBER():

    • 是一个分析函数,计算是在结果集生成之后的。它在所有行都被选出并排序后才生成行号。
    • 可以在 OVER 子句中指定排序规则,从而确保行号是按您指定的顺序分配的。

2. 用法

  • ROWNUM:

    • 直接在 SELECT 语句中使用。
    • 例如:
      SELECT ROWNUM AS "序号", column1 FROM table_name;
      
  • ROW_NUMBER():

    • 需要与 OVER 子句一起使用,通常用于根据某一列或多列的排序给每一行分配一个唯一的序号。
    • 例如:
      SELECT ROW_NUMBER() OVER (ORDER BY column1) AS "序号", column1 FROM table_name;
      

3. 行号的唯一性

  • ROWNUM:

    • 在某些情况下,ROWNUM 可能会导致重复的行号,尤其是在没有排序的情况下。
  • ROW_NUMBER():

    • 总是为每一行分配唯一的行号,即使在结果集中有重复的值。

例子

假设有一个表 employees,我们希望为按 salary 排序的员工生成行号:

  • 使用 ROWNUM 的查询:

    SELECT ROWNUM, e.*
    FROM employees e
    ORDER BY e.salary;  -- 这里的排序不会影响 ROWNUM 的分配
    
  • 使用 ROW_NUMBER() 的查询:

    SELECT ROW_NUMBER() OVER (ORDER BY e.salary) AS "序号", e.*
    FROM employees e;
    

在这个例子中,ROW_NUMBER() 会确保行号是根据 salary 排序后分配的,而 ROWNUM 不会。

总结

  • 如果您需要按特定顺序生成行号,并且确保每一行都有唯一的序号,使用 ROW_NUMBER() 是更合适的选择。
  • 如果您只是需要一个简单的行号,并且不关心排序,可以使用 ROWNUM

示例数据

假设有一个名为 employees 的表,包含以下字段和数据:

employee_idnamesalary
1Alice5000
2Bob7000
3Charlie6000
4David8000
5Eve7000

示例 1: 使用 ROWNUM

SELECT ROWNUM AS "序号", name, salary
FROM employees
WHERE salary > 6000;

结果

序号namesalary
1Bob7000
2David8000

解释

  • ROWNUM 在查询结果返回之前计算,因此即使 BobDavid 的薪资是大于 6000 的,行号仍然是按结果集生成的顺序分配的。

示例 2: 使用 ROW_NUMBER()

SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS "序号", name, salary
FROM employees;

结果

序号namesalary
1David8000
2Bob7000
3Eve7000
4Charlie6000
5Alice5000

解释

  • ROW_NUMBER() 根据 salary 的降序排序后生成行号,因此 David 的行号为 1,BobEve 的行号分别为 2 和 3。

示例 3: 同时使用 ROWNUMROW_NUMBER()

SELECT ROWNUM AS "序号", T.*
FROM (SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS "行号", name, salaryFROM employees
) T
WHERE T.salary > 6000;

结果

序号行号namesalary
12Bob7000
21David8000

解释

  • 内部查询使用 ROW_NUMBER() 生成按薪资降序排序的行号。
  • 外部查询使用 ROWNUM 生成外部序号,显示符合条件的记录。

总结

  • ROWNUM: 在查询中直接生成行号,计算在结果集生成之前,可能导致意外的行号分配。
  • ROW_NUMBER(): 根据指定的排序生成行号,适用于需要根据特定顺序生成唯一行号的场景。

希望这些示例能够帮助您更好地理解 ROWNUMROW_NUMBER() 的使用。如果还有其他问题,请随时问我!


http://www.ppmy.cn/ops/134220.html

相关文章

Vue 3 中使用 `<script setup>` 语法糖实现模板插值表达式

Vue 3 中使用 <script setup> 语法糖实现模板插值表达式 Vue 3 中的 <script setup> 语法糖让我们可以更直接地定义响应式数据和计算属性&#xff0c;从而在模板中使用插值表达式更加简洁。这种写法不需要手动 return 数据和方法&#xff0c;代码更加清晰。本文将…

DApp开发:定制化解决方案与源码部署的一站式指南

去中心化应用&#xff08;DApp&#xff09;随着区块链技术的发展&#xff0c;成为众多行业探索与创新的重要方向。无论是金融、供应链、游戏&#xff0c;还是社交和艺术市场&#xff0c;DApp都为传统业务模式带来了全新可能。然而&#xff0c;开发一款DApp并非易事&#xff0c;…

Science Robotics 封面论文:视触觉传感器的手内操作

现在&#xff0c;随便丢给机械手一个陌生物体&#xff0c;它都可以像人类一样轻松拿捏了。除了苹果&#xff0c;罐头、乐高积木、大象玩偶、骰子&#xff0c;都不在话下&#xff1a; 这就是来自Meta FAIR团队最新的NeuralFeels技术&#xff0c;通过融合触觉和视觉&#xff0c;机…

uniapp解析蓝牙设备响应数据bug

本文章为了解决《uniapp 与蓝牙设备收发指令详细步骤(完整项目版)》中第十步的Array 解析成 number函数bug 1、原代码说明 function array16_to_number(arrayValue) {const newArray arrayValue.filter(item > String(item) ! 00 || String(item) ! 0)const _number16 ne…

OpenWebUI,RAG+外部知识库+AI写文的开源应用

引言 自从去年AI火起来之后&#xff0c;很多人便热衷于寻找适合自用的AI开源项目&#xff0c;把各家大模型API接入到自己的AI程序里&#xff0c;便可以通过AI辅助完成一系列日常任务&#xff0c;比如内容翻译/润色/总结/撰写、格式转换、数据分类、代码分析、角色扮演等等。 …

江协科技之STM32驱动1.3寸/0.96寸/0.91寸OLED显示屏介绍

目录 编码介绍 ASCII码 汉字编码 取模软件 江协科技OLED库适用器件 SSD1306简介 模块引脚更改 0.91寸OLED适配 模块驱动必备知识 驱动代码 OLED_Font.h OLED.h OLED.c 编码介绍 ASCII码 ASCII码是一套数字到字符的映射标准&#xff0c;它规定了用什么数字表示…

XML Schema 字符串数据类型

XML Schema 字符串数据类型 1. 概述 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的机制来描述 XML 数据的类型、结构和约束。在 XML Schema 中&#xff0c;字符串数据类型是一种基本数据类型&#xff0c;用于表示文本数据。 2. 字符串数据类型 …

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令&#xff0c;生成自签名证书和私钥文件&#xff1a; sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509&#xff1a;生成自签名证书。…