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

SQL计算列

SqlServer:

ALTER TABLE KC_BILLHEAD ADD bill_no AS coalesce(billno ,'' ) PERSISTED;

这是一个SQL语句,用于向表KC_BILLHEAD添加一个计算列bill_no。让我解释一下这个语句的各个部分:

ALTER TABLE KC_BILLHEAD - 修改表KC_BILLHEAD的结构
ADD bill_no - 添加一个名为bill_no的列
AS coalesce(billno, '') - 这个列的值是通过coalesce函数计算得到的,它会返回第一个非空值
PERSISTED - 表示这个计算列的值会被物理存储在表中

这个语句的作用是创建一个新列bill_no,它会:

如果billno列有值,则bill_no等于billno的值
如果billno列为NULL,则bill_no等于空字符串''
由于指定了PERSISTED,这个值会被实际存储在表中而不是每次计算

这是一个常见的SQL技巧,用于确保列中不会有NULL值,而是用空字符串代替。

  • 如果为 billno 列提供值,bill_no 会自动根据 COALESCE(billno, '') 的规则计算结果并存储(因为它是 PERSISTED)。
  • 如果更新 billno 列的值,bill_no 也会自动重新计算并更新存储的值。

oracle:


ALTER TABLE KC_BILLHEAD ADD (
    bill_no VARCHAR2(50) GENERATED ALWAYS AS (NVL(billno, '')) VIRTUAL
);
 

mysql:

ALTER TABLE KC_BILLHEAD ADD COLUMN bill_no VARCHAR(50) 
    GENERATED ALWAYS AS (IFNULL(billno, '')) STORED;
 

-----------------------------------------------------------------------------------------------------------

--查询计算列

SQL Server

通过系统视图 sys.computed_columns 查询是否为计算列

SELECT is_computed, definition 
FROM sys.computed_columns 
WHERE object_id = OBJECT_ID('表名') AND name = '列名';

is_computed=1 表示是计算列,definition 列显示计算公式

Oracle
查询 ALL_TAB_COLS 视图的 VIRTUAL_COLUMN 字段

SELECT column_name, virtual_column, data_default 
FROM ALL_TAB_COLS 
WHERE table_name = '表名' AND column_name = '列名';

VIRTUAL_COLUMN='YES' 表示是虚拟列(计算列)

MySQL
通过 INFORMATION_SCHEMA.COLUMNS 表的 GENERATION_EXPRESSION 字段判断:

SELECT column_name, generation_expression 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = '表名' AND COLUMN_NAME = '列名';

若 GENERATION_EXPRESSION 不为空,则为生成列(计算列)

http://www.xdnf.cn/news/9211.html

相关文章:

  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南
  • 贝壳后端golang面经
  • 【信号与系统】【转载记录】漫谈《信号与系统》
  • 体绘制学习
  • Android开机向导定制(2)开机向导配置
  • 【免费】【无需登录/关注】多点矩阵计算器,计算任何坐标系转换
  • 【无标题】C++单例模式详解
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • linux如何查看网络设备类型
  • 学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙
  • 机器学习中的关键术语及其含义
  • 打造自己的开源组件:如何将 Starter 发布到 Maven Central?
  • 人工智能100问☞第34问:什么是语音识别与合成?
  • xilinx 7系列底层可配置逻辑块CLB资源简介
  • js 实现多并发任务处理
  • AI时代的弯道超车之第二十一章:AI会颠覆哪些行业?
  • 什么是MCP技术,跟http技术有什么区别
  • Excel 统计某个字符串在指定区域出现的次数
  • 低空经济管理系统设计方案
  • Spring Boot 3.4.6 中文文档上线
  • 深入理解 JDK、JRE 和 JVM 的区别
  • CellularPro 1.8.6.1 | 提升网络速度,抢到更多基站的速度