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() ---返回一个角度的正切
- MOTS攻击之TCP攻击
- iOS学习——获取当前最顶层的ViewController
- 中国深圳一家厂商的智能摄像头曝出漏洞:至少 17.5 万设备可被远程攻击
- iOS学习——Xcode9上传项目到GitHub
- 手把手教你编写一个简单的PHP模块形态的后门
- 如何将简单的Shell转换成为完全交互式的TTY
- 如何使用HackRF做一个简单的IMSI捕获器
- 联想Z470黑化之路:硬件升级还能刷苹果Mac系统!
- 渗透测试TIPS之删除、伪造Linux系统登录日志
- 1分钟懂awk-技不在深,够用就行
- RChain节点通信机制
- Spark源码系列(一)spark-submit提交作业过程
- Android安全几道入门题目
- 挖洞经验 | 看我如何通过子域名接管绕过Uber单点登录认证机制
- 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 数组属性和方法
- 【Java】12 Map 集合
- 【Java】11 Set 集合
- 4.表格-HTML基础
- 2.语义化-HTML进阶
- MATLAB 与 C 语言的混合编程
- leetcode树之二叉树的层平均值
- C++雾中风景15:聊聊让人抓狂的Name Mangling
- 【Java】15 File 类
- seaborn更高效的统计图表制作工具
- 牛客2019跨年AK场题解(一)
- qiankun proxySand 沙箱
- MATLAB 与 C 语言的混合编程实战之辛普森积分法、自适应辛普森积分
- Java那些事之JDK环境配置及集成开发环境Eclipse安装
- 敲代码、作诗、写论文无所不能?史上最大AI模型GPT-3霸榜Github
- 数据结构实验——校园导游 实现最小生成树+最短路