数据库常用函数(不定时更新中)

一、Oracle数据库中涉及的函数:

1.TRIM():

作用:

在 Oracle 数据库中,TRIM() 函数主要用于去除字符串首尾的空格或指定字符。

语法:

TRIM([LEADING|TRAILING|BOTH] [trim_char FROM] string)

  • 默认行为TRIM(string) 等价于 TRIM(BOTH ' ' FROM string),即删除首尾空格

  • 定制化修剪:可指定删除方向(前导/后导/双向)和特定字符

2.NVL():

作用:

NVL() 是 Oracle 数据库中的一个经典函数,用于处理空值(NULL)。

语法

NVL(expr1, expr2)
  • 若 expr1 不为 NULL → 返回 expr1 的值

  • 若 expr1 为 NULL → 返回 expr2 的值
    核心目的:将 NULL 转换为业务可理解的默认值。

3.NVL2():

作用:

NVL2() 是 Oracle 数据库特有的三参数空值处理函数,相比 NVL() 提供了更精细的逻辑控制。

语法:

NVL2(expr, value_if_not_null, value_if_null)
  • 行为逻辑

    • 当 expr 不为 NULL → 返回第二个参数 value_if_not_null

    • 当 expr 为 NULL → 返回第三个参数 value_if_null

  • 强制返回:无论 expr 是否为空,必返回其中一个值(无传递 NULL 的可能)

与 NVL() 对比:

场景NVL2()NVL()
参数数量32
返回值逻辑非空/空分支明确单默认值替换
空值处理可返回非默认值只能返回固定默认值
典型用例条件分支明确的空值转换简单空值替换

4.COALESCE() :

作用:

COALESCE() 是 SQL 中处理 多字段空值 的核心函数,相比 NVL() 具有更强大的灵活性。

语法:

COALESCE(expr1, expr2, expr3, ..., exprN)
  • 行为:返回参数列表中第一个非 NULL 的值

  • 全为 NULL 时:返回 NULL

  • 参数数量:至少 2 个,最多数据库实现通常支持 100+ 参数(具体取决于数据库)

与 NVL() 对比:

场景COALESCE()NVL()
参数数量多参数 (>2)仅 2 参数
标准兼容性SQL 标准Oracle 特有
数据类型转换自动类型兼容检查需显式类型匹配
典型用例多字段备选值单字段默认值

性能优化要点:

  1. 短路特性
    COALESCE 按参数顺序执行,首个非 NULL 值出现后立即返回,后续表达式不再计算。应把高概率出现的条件前置。

  2. 索引利用
    在 WHERE 条件中使用时,需注意是否会导致索引失效:

    -- 优化前(可能导致全表扫描)
    WHERE COALESCE(indexed_column, 'N/A') = 'target'
    
    -- 优化后(利用索引)
    WHERE indexed_column = 'target' OR (indexed_column IS NULL AND 'target' = 'N/A')

  3. 数据类型堆叠
    当参数类型不一致时,数据库会尝试隐式转换,可能引发意外结果:

    COALESCE('123', 456) -- 在 PostgreSQL 中报错,需显式转换
    COALESCE(CAST('123' AS INT), 456) -- 安全写法

跨数据库差异:

数据库特性
Oracle从 9i 开始支持,参数最多 254 个
MySQL8.0+ 原生支持,MariaDB 10.0+ 支持
SQL Server2008+ 支持,与 ISNULL() 性能相近
PostgreSQL严格类型检查,需确保所有参数可转换为同一数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值