当前位置:首页 > 问答 > 正文

树叶云带你简单聊聊OceanBase里那些常用函数和它们怎么用

OceanBase官方文档、技术博客及社区分享)

咱们今天就用聊天的方式,说说OceanBase数据库里那些你平时可能会经常碰到的函数,以及它们最直白的用法,你不用把它想得多复杂,就当成是数据库提供的一些现成“小工具”,帮你轻松处理数据。

处理文本的“剪刀手”:字符串函数

当你需要把一堆文字拆开、合并或者找其中某一部分时,就用得上它们。

  1. CONCAT:字符串拼接能手

    • 干嘛用的? 把好几个字符串首尾连接起来,变成一个更长的字符串,你数据库里有“姓”和“名”两个字段,想合成一个“全名”显示出来。
    • 怎么用? CONCAT(字符串1, 字符串2, ...),超级简单,把你想要连起来的字段名或者直接写的文字(用单引号包起来)放进去就行了。
    • 举个栗子: SELECT CONCAT(last_name, ' ', first_name) AS full_name FROM employees; 这句就能把last_name和first_name用个空格连起来,输出像“张三丰”这样的全名。
  2. SUBSTR 或 SUBSTRING:截取一段文字

    • 干嘛用的? 从一长串文字里,切出你指定的那一小段,你只想看身份证号的前六位(地区码)。
    • 怎么用? SUBSTR(原始字符串, 开始位置, 要截多长),这里注意,OceanBase里字符串的位置通常是从1开始数的,不是0。
    • 举个栗子: SELECT SUBSTR('欢迎使用OceanBase', 4, 3) AS result; 这会从第4个字开始,截取3个字,结果就是“使用O”。
  3. LENGTH:量量文字有多长

    • 干嘛用的? 返回一个字符串的字符个数,检查用户输入的密码长度是否达标。
    • 怎么用? LENGTH(字符串)
    • 举个栗子: SELECT LENGTH('Hello, World!') AS len; 结果是13,因为空格和标点都算一个字符。

跟数字打交道:数值函数

这些函数专门对付数字计算。

  1. ROUND:四舍五入

    • 干嘛用的? 把一个小数四舍五入到指定的小数位数,把商品价格19.987元显示为19.99元。
    • 怎么用? ROUND(数字, 保留几位小数),如果省略第二个参数,默认就四舍五入成整数。
    • 举个栗子: SELECT ROUND(123.4567, 2) AS result; 结果就是123.46。
  2. ABS:绝对值

    树叶云带你简单聊聊OceanBase里那些常用函数和它们怎么用

    • 干嘛用的? 不管正负,只取数值的大小,计算温差,不管是升了5度还是降了5度,变化幅度都是5。
    • 怎么用? ABS(数字)
    • 举个栗子: SELECT ABS(-10.5) AS result; 结果是10.5。
  3. MOD:求余数

    • 干嘛用的? 计算两个数相除后的余数,判断一个数字是奇数还是偶数(除以2余0就是偶数)。
    • 怎么用? MOD(被除数, 除数)
    • 举个栗子: SELECT MOD(10, 3) AS result; 结果是1,因为10除以3商3余1。

处理日期和时间:日期时间函数

这些函数帮你轻松搞定生日、订单日期、时间间隔这些麻烦事。

  1. NOW 或 SYSDATE:获取当前时刻

    • 干嘛用的? 直接返回数据库服务器当前的日期和时间,记录一条数据是何时被插入的。
    • 怎么用? NOW(),它不需要任何参数。
    • 举个栗子: SELECT NOW() AS current_time; 会返回类似 2023-10-27 15:30:45 的结果。
  2. DATE_FORMAT:把日期打扮成你喜欢的样子

    • 干嘛用的? 把一个日期值按照你指定的格式输出,默认的日期格式可能你不喜欢,用这个可以随心所欲地变。
    • 怎么用? DATE_FORMAT(日期, '格式字符串'),格式字符串里用特定的符号代表年、月、日等。
    • 举个栗子: SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日') AS nice_date; 可能会输出“2023年10月27日”。
  3. DATEDIFF:计算两个日期差几天

    树叶云带你简单聊聊OceanBase里那些常用函数和它们怎么用

    • 干嘛用的? 计算两个日期之间相隔的天数,算一下订单创建日和发货日隔了多久。
    • 怎么用? DATEDIFF(日期1, 日期2),结果是日期1减去日期2的天数。
    • 举个栗子: SELECT DATEDIFF('2023-10-31', '2023-10-27') AS day_gap; 结果是4。

条件判断的“:条件函数

这是最有意思的一类,让查询结果根据条件变化。

  1. CASE WHEN:数据库里的“....”

    • 干嘛用的? 根据不同的条件,返回不同的值,功能非常强大,可以处理复杂的逻辑判断。
    • 怎么用? 有两种写法,一种简单一种复杂。
      • 简单Case: CASE 字段 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结果2 ... ELSE 其他结果 END
      • 搜索Case(更常用): CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 其他结果 END
    • 举个栗子: 给员工绩效打分评级。SELECT name, score, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS grade FROM employees; 这样就会根据分数自动生成评级。
  2. IF:更简洁的判断

    • 干嘛用的? 如果只需要进行简单的“..否则...”判断,用IF更简洁。
    • 怎么用? IF(条件, 条件为真时返回的值, 条件为假时返回的值)
    • 举个栗子: SELECT name, IF(age >= 18, '成年人', '未成年人') AS adult FROM users;

对付空值的“补缺者”:NULL处理函数

数据库里的NULL表示“没有数据”或“未知”,直接计算会出问题,需要特殊处理。

  1. IFNULL 或 COALESCE:给空值找个替补
    • 干嘛用的? 如果一个字段可能是NULL,你想让它显示为一个默认值(比如0或‘未知’),就用这个。
    • 怎么用? IFNULL(可能为空的字段, 替补值)COALESCE功能类似,但可以接受多个参数,返回第一个非NULL的值。
    • 举个栗子: 员工的奖金字段可能为NULL,你想让没奖金的人显示为0:SELECT name, IFNULL(bonus, 0) AS actual_bonus FROM employees;

好了,以上就是OceanBase中一部分非常常用且实用的函数,不用死记硬背,用到的时候知道有这么一个“工具”,然后翻一下文档(来源:OceanBase官方函数手册)看看具体语法就行了,多在实际的SQL语句里试试,很快就熟练了!