SQL必知必会—使用数据处理函数

《SQL必知必会》读书笔记

1.函数

与几乎所有DBMS都等同地支持SQL语句(如SELECT)不同,每一个DBMS都有特定的函数。事实上,只有少数几个函数被所有主要的DBMS等同支持。

DBMS函数的差异:

这里写图片描述

可以看到,与SQL语句不一样,SQL函数不是可移植的。这表示为特定SQL实现编写的代码在其他实现中可能不正常。

2.使用函数

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

  • 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。
  • 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。
  • 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。
  • 返回DBMS正使用的特殊信息(如返回用户登陆信息)的系统函数。

我们在上一课看到函数用作SELECT语句的列表成分,但函数的作用不仅于此。它还可以作为SELECT语句的其他成分,如WHERE子句中使用,在其他SQL语句中使用等,后面会做更多的介绍。

3.文本处理函数

常用的文本处理函数:

  • LEFT() 返回字符串左边的字符
  • LENGTH() 返回字符串的长度
  • LOWER() 将字符串转换为小写
  • LTRIM() 去掉字符串左边的空格
  • RIGHT() 返回字符串右边的字符
  • RTRIM() 去掉字符串右边的空格
  • SOUNDEX() 返回字符串的SOUNDEX()
  • UPPER() 将字符串转换为大写
SELECT vend_name, UPPER(vend_name) as vend_name_upcase
FROM Vendors

vend_name       vend_name_upcase
Bear Emporium   BEAR EMPORIUM
Bears R Us      BEARS R US
Doll and Inc.  DOLL HOUSE INC.

4.日期和时间处理函数

应用程序一般不使用日期和时间的存储格式,因此日期和时间函数总是用来读取、统计和处理这些值。由于这个原因,日期和时间函数在SQL中具有重要的作用。遗憾的是,它们很不一致,可移植性最差。

SQL Serve

SELECT order_num
FROM Orders
WHERE DATEPART(yy,order_date) = 2012

order_num
20005
20006
20007
20008
20009

Access

SELECT order_num
FROM Orders
WHERE DATEPART(yyyy,order_date) = 2012

这个例子中,DATEPART()函数返回日期的一部分。DATEPART()函数有两个参数,它们分别是返回的成分和从中返回成分的日期。

PostgreSQL类似功能的DATE_PART()函数

SELECT order_num
FROM Orders
WHERE DATE_PART('year',order_date) = 2012

Oracle

Oracle没有上述两个函数,不过有几个可用来完成相同检索的日期处理函数。

SELECT order_num
FROM Orders
WHERE to_number(t0_char(order_date,'YYYY')) = 2012

在这个例子中,to_char()函数用来提取日期的成分,to_number()用来将提取出的成分转换为数值,以便能与2012进行比较。

完成相同工作的另一方法是使用BETWEEN操作符:

SELECT order_num 
FROM Orders
WHERE order_date BETWEEN to_date('01-01-2012')
AND to_date('12-31-2012')

在此例子中,Oracle的to_date()函数用来将两个字符串转换为日期。

MySQL和MariaDB

MySQL和MariaDB用户可使用名为YEAR()的函数从日期中提取年份:

SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2012

SQLite

SELECT order_num
FROM Orders
WHERE strftime('%Y',order_date) = 2012

这里给出的例子提取和使用日期的成分(年)。按月份过滤,可以进行相同的处理,指定AND操作符以及年和月份的比较。

大多数DBMS具有比较日期、执行基于日期的运算、选择日期格式等的函数。

5.数值处理函数

数值处理函数仅处理数值数据。

在主要DBMS的函数中,数值函数是最一致、最统一的函数。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值