数据库——内置函数

需要执行SQL语句

 

create table student(
id number(1,0) constraint studnet_id primary key,
name varchar2(8),
sex char(2) default ‘男‘ ,
age number(3) default 0
)

insert into student values (‘1‘,‘王明‘,‘男‘,18);
insert into student values (‘2‘,‘孙丽‘,‘女‘,17);
insert into student values (‘3‘,‘王明‘,‘男‘,27);
insert into student (id,sex,age) values (‘4‘,‘男‘,27);
commit;

SQL函数概述

数据库中的函数与Java中的函数类似,都是完成一定功能的代码的集合。根据函数操作数据行数可将SQL函数分为单行函数和多行函数:

单行函数仅对条数据中的列进行操作并且返回一个结果,例如:select length(‘lanqiao‘) from dual——获取字符串字符个数

多行函数可以操作成组的条数据,每组返回一个结果,所以多行函数又称之为函数,例如:

select sex,count(id) from student group by sex——获取student表中男女人数

单行函数

单行函数根据操作对象的不同分为字符函数、数字函数、转换函数、日期函数和通用函数。

1、字符函数

a、lower(input):将大写字符转换为小写,例如:select lower(‘AbC‘) from dual——> abc

b、upper(input):将小写字符转换为大写,例如:select upper(‘AbC‘) from dual——>ABC

c、initcap(input):将每个单词首字母大写,例如:select initcap(‘i love you‘) from dual——> I Love You

d、concat(input1,input2):连接两个字符串,等价于连接运算符||,例如:select concat(‘lan‘,‘qiao‘) from dual——> lanqiao

e、substr(input,m[,n]):从m(m>=1)位置开始截取字符串,如果n被忽略则取到字符串结尾,否则取n个字符长度,例如:

select substr(‘OracleDB‘,1) from dual——>OracleDB        select substr(‘OracleDB‘,1,6) from dual——>Oracle

f、lengthc(input):获取以字符为单位的字符串长度,例如:select lengthc(‘lan桥‘) from dual——> 4

g、lengthb(input):获取以字节为单位的字符串长度,例如:select lengthb(‘lan桥‘) from dual——> 5(:一个汉字2字节)

h、length(input):获取字符串的字符数,等效于lengthc,例如:select length(‘lan桥‘) from dual——> 4

i、replace(input,char1,char2):将字符串中的char1字符串替换为char2,例如:select replace(‘AbAcA‘,‘A‘,‘a‘) from dual——> abaca

j、lpad(input,n,char):使用给定字符串从input边进行填充以使旧字符串的长度达到n,例如:select lpad(‘Oracle‘,9,‘*‘) from dual——> ***Oracle

k、rpad(input,n,char):使用给定字符串从input右边进行填充以使旧字符串的长度达到n,例如:select rpad(‘Oracle‘,9,‘**‘) from dual——> Oracle***

l、instr(input,char[,m][,n]) :获取char字符串在input字符串中的位置,m用于指定查找的开始位置,n用于指定char字符串第n次出现。m与n的默认值为1,即从input字符串开头开始查找,获取char字符串第一次出现的位置,例如:

select instr(‘DBOracleDB‘,‘DB‘) from dual——>1(从DBOracleDB字符串开头查找DB第一次出现的位置)

select instr(‘DBOracleDB‘,‘DB‘,3) from dual——>9(从DBOracleDB字符串第3个字符查找DB第一次出现的位置)

select instr(‘DBOracleDB‘,‘DB‘,1,2) from dual——>9(从DBOracleDB字符串第1个字符查找DB第二次出现的位置)

2、数字函数

a、round(input[,n]):将数值四舍五入,参数n表示有效数位,如果忽略则无小数位部分,例如:

select round(1.945) from dual——2                         select round(1.945,2) from dual——1.95

b、trunc(input[,n]):将数值截断,参数n表示有效数位,如果忽略则无小数位部分,例如:

select trunc(1.945) from dual——1                         select trunc(1.945,2) from dual——1.94

c、mod(m,n):返回m除以n的余数,将m与n中间逗号理解成Java中%即可,例如:select mod(1,3) from dual——1

3、转换函数

a、to_number(char[,‘fmt‘]):将字符串类型的数据转换成数字类型的数据,

b、to_char(input[,‘fmt‘]):将日期数字类型的数据转换为字符串

将日期类型的数据转换为字符串:

日期格式元素


格式元素


说明


结果


CC


世纪


21


YYYY



2017


YYY、YY、Y


年的最后3、2、1个数字


017、17、7


Y,YYY


年,在指定位置带逗号


2,017


YEAR


拼写年


TWENTY SEVENTEEN


BC、AD


根据日期自动设置为BC、AD


AD


B.C.、A.D.


根据日期自动设置为B.C.、A.D.


A.D.


Q


季度


3


MM


月:两位数字值


06


MONTH


月份的全拼,右端补齐空格,总长度为9个字符


JUNE


Mon


月份的前3个字母,首字母大写


Jun

          

        时间格式元素

      

e.g

select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss‘) from dual

fm、th和sp的使用

fm:

i、删除填补的空格,例如:select lengthb(to_char(sysdate,‘fmmonth‘)) from dual

ii、删除前导0,例如:select to_char(sysdate,‘fmmm‘) from dual

th:表示序数,例如:select to_char(sysdate,‘Qth‘) from dual

sp:将数字变为英文,例如:select to_char(sysdate,‘Qsp‘) from dual

注意:为了达到更好的输出效果,可以在格式模板中直接使用标点符号作为各元素之间的间隔,还可以在格式模板中增加字符串,但是该字符串需要用双引号引起来,例如

select to_char(sysdate,‘cc"世纪" yyyy-mm-dd hh24:mi:ss‘) from dual;

将数字类型的数据转换为字符串:

c、to_date(char[,‘fmt‘]):将字符类型转为日期类型

fx:用于限制所传入的日期字符串必须和格式模板精确匹配(包括标点符号和空格)

select to_date(‘09 03,2006‘,‘fxMM DD,YYYY‘) from dual;--去掉fx才可以执行

select to_date(‘9 3,2006‘,‘fxMM DD,YYYY‘) from dual;-- 去掉fx才可以执行

select to_date(‘09 03,2006‘,‘fxMM DD;YYYY‘) from dual;--可以执行

4、日期函数

a、months_between(date1,date2):返回两个日期之间的月数,例如

select months_between(to_date(‘2017-3-21‘,‘yyyy-mm-dd‘), to_date(‘2017-1-21‘,‘yyyy-mm-dd‘)) from dual——2

5、通用函数

a、nvl(expr,value):如果expr为空,则返回value的值;否则返回expr

b、nvl2(expr,value1,value2):如果expr1为非空,则返回value1的值,否则返回value2的值;

许小力问题:

select nvl(sysdate,1)from dual

select nvl(‘1‘,sysdate)from dual

select nvl(‘aa‘,1)from dual

select nvl2(‘aa‘,1,sysdate)from dual

c、coalesce(expr1, expr2,.. exprn):如果expr1为非空,则返回expr1的值;如果expr1为空,则返回expr2的值,依次类推,如果前面的表达式都为空,则返回exprn的值。

6、其它

a、decode (条件,值1,返回值1,值2,返回值2,...值n,返回值n,默认值)

create table user_info(
name varchar2(8),
sex number(1)
)
insert into user_info(name,sex) values (‘张三‘,1);
insert into user_info(name,sex) values (‘李四‘,0);
insert into user_info(name,sex) values (‘王五‘,2);
commit;
select name,decode(sex,0,‘女‘,1,‘男‘,‘其它‘) sex_name from user_info

多行函数

多行函数又称组函数,这类函数用于对行数据进行操作,在使用时需要注意一下几点:

1、组函数忽略空值——可以通过nvl、nvl2或coalesce函数用一个值代替空值;

2、组函数默认考虑重复值——可以通过distinct关键字使组函数不考虑重复值;

常用组函数:

avg(input):求平均值,例如:select avg(age) from student——计算学生平均年龄,包括重复的年龄

max(input):求最大值,例如:select max(age) from student——获取学生表中最大年龄

min(input):求最小值,例如:select min(age) from student——获取学生表中最小年龄

sum(input):求和,例如:select sum(age) from student——计算学生表中年龄之和

count(*|input):求行数,如果使用*则不会忽略空值的行,例如:

select count(name) from student——3,student表中有一条数据中的name为空

select count(distinct name) from student——2,student表中有一条数据中的name为空,有两条数据name的值重复

select count(nvl(name,‘ ‘)) from student——4, 将name为空的值置为1个空格

select count(*) from student——4,*不会忽略空值的行

stddev(input):求标准差

variance(input):求方差

注意:count、max和min组函数操作的数据的数据类型可以是char、varchar2、number或date,但不能为clob;avg、sum、stddev和varlance仅能用在数字类型的数据上。

group by:

group by用于将表中数据划分为若干个组,group by后面用于指定分组的依据,例如:

select sex,count(id) from student group by sex——将student表学生按照sex分组,然后统计每组中的人数

注意:

a、只有对应相同的多行数据才会归为一组,如下:

create table fruit(
       name varchar2(4),
       address varchar2(12),
       type_name varchar2(6)
)

insert into fruit values (‘香蕉‘,‘广西‘,‘大香蕉‘);
insert into fruit values (‘苹果‘,‘山东‘,‘红富士‘);
insert into fruit values (‘香蕉‘,‘菲律宾‘,‘小香蕉‘);--帝王蕉比较小
insert into fruit values (‘苹果‘,‘山西‘,‘青苹果‘);
insert into fruit values (‘苹果‘,‘山西‘,‘国光‘);

执行上面SQL语句后表中数据如下:

i、执行select name from fruit group by name SQL语句,其查询结果如下:

ii、执行select name,address from fruit group by name,address SQL语句,其查询结果如下:

b、如果select语句中使用group by进行了分组,则select子句中只可以有组函数和分组字段,不能含有其他字段,否则SQL语句报错;

c、如果group by子句后面跟着order by子句,则order by子句用于排序的字段必须是组函数或分组字段;

d、如果select语句中含有where、order by,那么group by需放在where之后order by之前,即先获取符合where条件的“有效”数据,再依据group by对数据进行分组,最后再排序;

having:

where后面不能使用多行函数,只能使用单行函数和字段,having关键字弥补了这一不足:having子句用于对分组结果进行约束,例如:

select name from student group by name having count(name)>1——查询哪些名字重名了

注意:

a、having子句必须和group by子句一起使用,否则出现如下错误,例如:

select name from student having count(name)>1

b、having子句必须放在group by子句之后,order by子句之前

原文地址:https://www.cnblogs.com/lyxcode/p/9454257.html

时间: 2024-10-08 09:02:49

数据库——内置函数的相关文章

使用内置函数操作数据库

0.视频:http://www.imooc.com/video/3383 1.笔记: ContentValues: 1)用于存储一组可以被ContentResolve处理的值: 2)代码示例: ContentValues values=new ContentValues();//类似hashMap key value values.put("name", "张三"); 3)执行对应的Sql操作: db.update("stutb", values

Oracle数据库,查询语句、内置函数

一.数据库的查询语句: 1.查询整个表: select * from 表名 例: 2.通过条件查询某一行数据: select * from 表名 where 字段名 例: 3.某一列数据去重查询: select distinct 字段名 from 表名 例: 4.查询的结果按某个字段升序或倒序排列:  select * from 表名 order by 字段名;                  在字段名的后面加desc为降序顺序排列 例: 5.查询某一列在某个范围内的数据: select *

thinkphp对数据库操作有哪些内置函数

原文:thinkphp对数据库操作有哪些内置函数 getModelName() 获取当前Model的名称 getTableName() 获取当前Model的数据表名称 switchModel(type,vars=array()) 动态切换模型 table() 设置当前操作的数据表 field() 设置要查询的数据字段 where() 设置查询或者操作条件 data(data) 设置数据对象 order(order) 设置排序 limit(limit) 查询限制 page(page) 查询分页 j

数据存储——SQLite数据库存储——SQL语句——DML数据操作语言、内置函数聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

mysql数据库编程,内置函数,存储过程(循环插入)

mysql编程注释:行:# 或者 -- 定义变量set 变量名 =变量名注意:为了区分系统变量和字段 在加一个@标识符例如   set @who ='韩当'; 使用select 可以获得当前变量的值 select 10,15,20 into @a,@b,@c; 注意:=应该是赋值,但是在select语句内,就成了关系等于,使用专门的赋值运算符:=同样使用与set 1.作用域, 用户定义的函数,是全局的(函数内可以),村子局部作用域变量,函数内定义的变量2.有效期,回话结束(连接结束) 内置函数

python 之 数据库(内置函数、流程控制、索引)

10.17 内置函数 强调:mysql内置的函数只能在sql语句中使用 #数学函数 round(x,y) #返回参数x的四舍五入的有y位小数的值 rand() #返回0到1内的随机值,可以通过提供一个参数(种子)使rand()随机数生成器生成一个指定的值. ? #加密函数 md5() #计算字符串str的MD5校验和 password(str) #返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法. date_format: create table bl

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

Mysql函数(内置函数,自定义函数)

简述 SQL:结构化查询语言,是一门编程语言,是用于管理数据库的编程语言. 元素:数据,数据类型,变量,函数,流程控制,运算符,注释. 注释: 行: # –[空格] 块: /* */ select * from swpu_stu #where id=2; ; select * from swpu_stu -- where id=2; ; 结束符: select * from swpu_stu where id=2\g select * from swpu_stu where id=2\G 可以使

PHP基本内置函数

基本知识 1.引用 php语言中有引用的概念,相当于指针.如$a = &$b <?php $a = 1; $b = &$a; $b = "2$b"; echo "$a,$b" ?> 2.运算符优先级 (new) > (++.–) > (*./.%) > (+.-) > (&&)> (||) > (?:) > (==) > (and) > (xor) > (or)