SQL函数---文本处理函数、日期和时间处理函数、数值处理函数

本文介绍了SQL中的函数使用,包括文本处理函数(如UPPER, LOWER, LENGTH等)、日期和时间处理函数(如YEAR, DATEPART等)以及数值处理函数(如ABS, SQRT等)。虽然函数在不同DBMS中可能存在语法差异,但它们在数据处理中起着重要作用,提供便捷的数据转换和计算功能。" 93466867,5666318,Oracle数据泵:高效数据库备份与还原,"['数据库管理', 'Oracle 数据库', '数据迁移', '数据泵工具']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数处理数据

函数

SQL 也可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。
与几乎所有 DBMS 都等同地支持 SQL 语句(如 SELECT)不同,每一个DBMS 都有特定的函数。
列出了 3 个常用的函数及其在各个 DBMS 中的语法:
请添加图片描述
SQL 语句不一样,SQL 函数不是可移植的。这意味着为特定 SQL 实现编写的代码在其他实现中可能不能用。

可移植(portable)
所编写的代码可以在多个系统上运行。

使用函数

大多数 SQL 实现支持以下类型的函数。

  • 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文
    本函数。
  • 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的
    数值函数。
  • 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期
    之差,检查日期有效性)的日期和时间函数。
  • 用于生成美观好懂的输出内容的格式化函数(如用语言形式表达出日
    期,用货币符号和千分位表示金额)。
  • 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数。
文本处理函数

UPPER(s)
将字符串转换为大写

将字符串 runoob 转换为大写:
SELECT UPPER("runoob"); 

SUBSTR(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO

LEFT(s,n)
返回字符串 s 的前 n 个字符

返回字符串 runoob 中的前两个字符:
SELECT LEFT('runoob',2) -- ru

LENGTH()(也使用DATALENGTH()或LEN())
返回字符串的长度

LOWER(s)
将字符串 s 的所有字母变成小写字母

字符串 RUNOOB 转换为小写:
SELECT LOWER('RUNOOB') -- runoob

LTRIM(s)
去掉字符串 s 开始处的空格

去掉字符串 RUNOOB开始处的空格:
SELECT LTRIM("   RUNOOB") AS LeftTrimmedString;-- RUNOOB

RIGHT(s,n)
返回字符串 s 的后 n 个字符

返回字符串 runoob 的后两个字符:
SELECT RIGHT('runoob',2) -- ob

RTRIM(s)
去掉字符串 s 结尾处的空格

去掉字符串 RUNOOB 的末尾空格:
SELECT RTRIM("RUNOOB     ") AS RightTrimmedString;   -- RUNOOB

SUBSTR(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTRING(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串,等同于 SUBSTR(s, start, length)

从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO

SOUNDEX()
返回字符串的SOUNDEX值

SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX 考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。
虽然 SOUNDEX 不是 SQL 概念,但多数 DBMS 都提供对 SOUNDEX的支持。

Customers 表中有一个顾客Kids Place,其联系名为 Michelle Green。但如果这是错误的输入,此联系名实际上应该是 Michael Green,该怎么办呢?显然,按正确的联系名搜索不会返回数据。
现在试一下使用 SOUNDEX()函数进行搜索,它匹配所有发音类似于 Michael Green 的联系名:

SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');

请添加图片描述
在这个例子中,WHERE 子句使用 SOUNDEX()函数把 cust_contact 列值和搜索字符串转换为它们的 SOUNDEX 值。
因为 Michael Green 和Michelle Green 发音相似,所以它们的 SOUNDEX 值匹配,因此 WHERE子句正确地过滤出了所需的数据。
请添加图片描述

日期和时间处理函数

日期和时间采用相应的数据类型存储在表中,每种 DBMS 都有自己的特殊形式。日期和时间值以特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。
应用程序一般不使用日期和时间的存储格式,因此日期和时间函数总是用来读取、统计和处理这些值。
由于这个原因,日期和时间函数在 SQL中具有重要的作用。遗憾的是,它们很不一致,可移植性最差。

Orders 表中包含的订单都带有订单日期。
要检索出某年的所有订单,需要按订单日期去找,但不需要完整日期,只要年份即可。
DB2,MySQL 和 MariaDB 具有各种日期处理函数,但没DATEPART()。
DB2,MySQL 和 MariaDB 用户可使用名为 YEAR()的函数从日期中提取年份:

SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2020;

DBMS 提供的功能远不止简单的日期成分提取。
大多数 DBMS 具有比较日期、执行日期的运算、选择日期格式等的函数。
但是,可以看到,不同 DBMS 的日期−时间处理函数可能不同。

数值处理函数

数值处理函数仅处理数值数据。
这些函数一般主要用于代数、三角或几何运算,因此不像字符串或日期−时间处理函数使用那么频繁。
在主要 DBMS 的函数中,数值函数是最一致、最统一的函数。请添加图片描述

ABS(x)
返回 x 的绝对值

返回 -1 的绝对值:
SELECT ABS(-1) -- 返回1

COS(x)
求余弦值(参数是弧度)

SELECT COS(2);

EXP(x)
返回 e 的 x 次方

计算 e 的三次方:
SELECT EXP(3) -- 20.085536923188

PI()
返回圆周率(3.141593)

SELECT PI() --3.141593

SQRT(x)
返回x的平方根

25 的平方根:
SELECT SQRT(25) -- 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值