SQL学习之使用常用函数处理数据
一、在介绍使用函数处理数据前,先说下使用DBMS(数据库管理系统)处理数据所带来的问题!
1、与几乎所有的DBMS都同等的支持SQL语句(如SELECT)不同,每一个DBMS都有特定的函数,事实上,只有少数几个函数被所有主要的DBMS等同的支持。
比如,像提取字符串的组成部分,ACESS使用MID();DB2、Oracle、Postgre和SQLite使用SUBSTR(),而MySQL和SQL SERVER使用SUBSTRING();
比如,数据类型的转换,Access和Oracle使用多个函数,每种类型的转换有一个函数;DB2和PostgreSQL使用Cast();MariaDB、MySQL和SQL Server使用CONVERT();
比如,获取当前日期,Access使用Now();DB2和PostgreSQL使用CURRENT_DATE;MariaDB和MySQL使用CURDATE();Oracle使用SYSDATE,SQL Server使用GETDATE(),SQLite使用DATE();
通过上面的例子我们可以看出,与SQL语句不一样,SQL函数是不可以移植的。这意味这特定SQL实现编写的代码在其他实现中可能不正常。
所以如果你在编写SQL程序的时候,需要考虑程序的可移植性,那么你在使用函数的时候一定要慎重,因为这些函数,在某些环境中可能没被实现,所以你在编写SQL代码的时候一定要写好注释,来说名这段代码是干嘛用的!以便于后续的开发或者库之间的移植!
2、下面是大多数SQL实现并支持一下的函数
(1)用于处理文本字符串(如删除或者填充,转换值为大写或者小写)的文本函数。
(2)用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。
(3)用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期的有效性)的日期和时间函数。
(4)返回DBMS正使用的特殊信息(如返回用户登录信息)的系统函数
下面是常用的文本处理函数
1、LEFT() ---返回字符串左边的字符
用法LEFT(计算字段,index),index表示向左查找开始的索引 如下代码:
select cname,cno,tno from dbo.course where cno='c001'
现在我需要cname列值中'S'左边的字符串,下面是解决代码:
select LEFT(cname,2),cno,tno from dbo.course where cno='c001'
ok,完成需求!
2、RIGHT() ---返回字符串右边的字符
用法和LEFT()方法相反
3、LENGTH() (也可以使用DATALENGTH()或LEN()) ---返回字符串的长度 SQL Server中可以使用DATALENGTH和LEN()
用法:如下代码:
select DATALENGTH(cname),cno,tno from dbo.course where cno='c001'
4、 文本处理函数之UPPER()函数 ---将字符串转为大写
用法:UPPER(计算字段),将计算字段所在的列值全部转换成大写字母,看如下代码:
select top 5 cname,cno,tno from dbo.course
现在有一个需求,需要将cname列值全部转换成大写,下面是解决代码:
select top 5 UPPER(cname),cno,tno from dbo.course
ok,需求完成!
6、文本处理函数之LOWER()函数 ---将字符串转换成小写
用法和UPPER()函数相反!
7、SOUNDEX() ---返回字符串的SOUNDEX值
SOUNDEX是一个将任何文本字符串转换描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较!虽然SOUNDEX不是SQL概念,但多数DBMS都提供对SOUNDEX的支持!代码如下:
select * from student where sname='Michael Green'
这个时候我们忘记sname的列值怎么拼了,只记得他的读音,这个时候使用SOUNDEX()函数就同样能检索出这条记录,代码如下:
select * from dbo.student where SOUNDEX(sname)=SOUNDEX('Michelle Green')
ok,完成检索!
8、日期和时间处理函数DATEPART()函数
在使用日期和时间处理函数编写程序前,需要注意一点,不同的DBMS都有自己特有的时间和日期格式,所以他们很不一致,可移植也非常差!
有如下代码:
select * from tb_order
现在有一个需求,需要检索2016年的所有订单数,下面是解决代码:
select * from tb_order where DATEPART(YY,orderdate)=2016
ok,需求完成!
9、下面是常用的数值处理函数
ABS() ---返回一个数的绝对值
COS() ---返回一个角度的余弦
EXP() ---返回一个数的指数值
PI() ---返回圆周率
SIN() ---返回一个角度的正弦
SQRT() ---返回一个数的平方根
TAN() ---返回一个角度的正切
- 碎片化 | 第四阶段-41-struts2字节流生成验证码-视频
- Python|模块,包,标准模板
- 人脸识别应用之“变脸”
- 碎片化 | 第四阶段-32-Struts2列表展示-视频
- Angularjs中UI Router超级详细的教程{{下}}
- 碎片化 | 第四阶段-33-Struts2-Spring整合环境概述讲解-视频
- 碎片化 | 第四阶段-34-Struts2-Spring重构项目案例-视频
- Python|高阶函数
- OpenCV特征点检测——ORB特征
- 智能图片压缩-腾讯智图
- 理解javascript闭包前,先理解作用域链
- 图片加速 WebP格式
- 移动端是时候考虑抛弃jQuery了?
- 深入理解Java的接口和抽象类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++拾取——使用stl标准库实现排序算法及评测
- 机器人实践课程镜像分享及使用说明(Arduino+ROS1+ROS2+Gazebo+SLAM+...)
- ROS 2 Foxy Fitzroy遇见Ubuntu 20.04
- ROS Noetic Ninjemys遇见Ubuntu 20.04
- Kustomize ConfigMapGenerate自动生成ConfigMap中的坑
- ThreadLocal的使用及原理
- 参数绑定
- ndn挖坑记(一)
- Python之QQ邮箱告警脚本
- 访问令牌JWT
- Java集成JWT
- Computer Graphics note(3):视口变换&光栅化
- Mac安装mysql
- 剑指Offer题解
- nginx 常见问题记录