1、数字函数 NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的,否则返回string1的,如果两个参数都为NULL ,则返回NULL。示例如下: SQL select NVL(NULL,1) from dual; NVL(NULL,1)----------- 1 SQL select NVL(12,1) from
1、数字函数
NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。示例如下:
SQL> select NVL(NULL,1) from dual; NVL(NULL,1) ----------- 1 SQL> select NVL(12,1) from dual; NVL(12,1) ---------- 12 SQL> select NVL('',1) from dual; -----单引号里没有空格 NVL('',1) --------- 1
NVL的扩展- NVL2(E1, E2, E3)
Oracle在NVL函数的功能上扩展,提供了NVL2函数。 NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,否则返回E2。示例如下:
SQL> select nvl2(NULL,12,3) from dual; NVL2(NULL,12,3) --------------- 3 SQL> select nvl2(5,12,3) from dual; NVL2(5,12,3) ------------ 12
SIGN(n) :该函数用于检测数字的正负.如果数字n小于0,则函数的返回值位-1;如果数字n的值等于0,则函数的返回值等于0,如果数字n大于0,则函数的返回值等于1.
SQL> select SIGN(-10),SIGN(0),SIGN(5) from dual; SIGN(-10) SIGN(0) SIGN(5) ---------- ---------- ---------- -1 0 1
CEIL(n) :该函数用于返回大于等于数字n的最小整数.
SQL> select ceil(15),ceil(15.1) from dual; CEIL(15) CEIL(15.1) ---------- ---------- 15 16
FLOOR(n):该函数用于返回小于等于数字n的最大整数。
SQL> select floor(15),floor(15.1) from dual; FLOOR(15) FLOOR(15.1) ---------- ----------- 15 15
MOD(m,n) :该函数用于返回两个数字相除后的余数.如果数字n为0,则返回结果为m。
SQL> select mod(10,3) from dual; MOD(10,3) ---------- 1 SQL> select mod(10,0) from dual; MOD(10,0) ---------- 10
ROUND(n,[m]) :该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位.示例如下:
SQL> select round(65.698) from dual; ROUND(65.698) ------------- 66 SQL> select round(65.698,1) from dual; ROUND(65.698,1) --------------- 65.7 SQL> select round(65.698,-1) from dual; ROUND(65.698,-1) ---------------- 70
TRUNC(n,[m]) :该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是正数,则将数字n截取到小数点后的第m位;如果数字m是负数,则将数字n截取到小数点前m位.示例如下:
SQL> select trunc(65.698) from dual; TRUNC(65.698) ------------- 65 SQL> select trunc(65.698,2) from dual; TRUNC(65.698,2) --------------- 65.69 SQL> select trunc(65.698,1) from dual; TRUNC(65.698,1) --------------- 65.6 SQL> select trunc(65.698,-1) from dual; TRUNC(65.698,-1) ---------------- 60 SQL> select trunc(65.698,-2) from dual; TRUNC(65.698,-2) ---------------- 0
2、字符函数
字符函数的输入参数为字符类型,其返回值位字符类型或数字类型。字符函数既可以在SQL语句中使用,也可以在PL/SQL块中使用.
TRIM 函数的语法如下:
TRIM([ { { LEADING | TRAILING | BOTH } [ trim_character ] | trim_character } FROM ] trim_source )
下面的这种情况是用于截取特定的字符串:
DECLARE v_source VARCHAR2(20) :='ABCDGHJHAB'; v_trim VARCHAR2(20); BEGIN v_trim:=trim('A' FROM v_source); dbms_output.put_line(v_trim); END;
下面的情况是去除字符串的行首和行尾的空格 ,为了便于理解,用length函数打印trim截取字符串后的长度:
SQL> select length(trim(' hello ')) from dual; ----什么都不写,默认情况下截取两端的空格 LENGTH(TRIM('HELLO')) --------------------- 5 SQL> select length(trim(leading from ' hello')) from dual; ------leading 截取字符串前面空格 LENGTH(TRIM(LEADINGFROM'HELLO' ------------------------------ 5 SQL> select length(trim(trailing from ' hello ')) from dual; ---trailing 截取字符串后面空格 LENGTH(TRIM(TRAILINGFROM'HELLO ------------------------------ 6 SQL> select length(trim(both from ' hello ')) from dual; -----both 截取两端的空格 LENGTH(TRIM(BOTHFROM'HELLO')) ----------------------------- 5
ASCII(char):该函数用于返回字符串首字符的ASCII值,示例如下:
SQL> select ascii('a') "a" ,ascii('A') "A" from dual; a A ---------- ---------- 97 65
CHR(char) :该函数用于将ASCII码值转变为字符。示例如下:
SQL> select chr('97') from dual; CHR('97') --------- a SQL> select chr('56') from dual; CHR('56') --------- 8
CONCAT:该函数用于连接字符串,其作用于连接操作符(||)完全相同。示例如下:
SQL> select concat('Good','Morning') from dual; CONCAT('GOOD','MORNING') ------------------------ GoodMorning SQL> select 'Good'|| 'Morning' from dual; 'GOOD'||'MORNING' ----------------- GoodMorning
LENGTH(char):该函数用于返回字符串的长度,如果字符串的类型为CHAR,则其长度包括所有的后缀空格:如果char是null,则返回null。示例如下:
SQL> select length('111') from dual; LENGTH('111') ------------- 3
3、日期时间函数
日期时间函数用于处理DATE和TIMESTAMP类型的数据。 除了函数,MONTHS_BETWEEN返回数字值外,其它日志函数均返回DATE类型的数据.Oracle是以7位数字格式来存放日期数据的,包括世纪、年、月、日小时、分钟、秒,并且默认时间显示格式为"DD-MON-YY"。下面详细介绍Oracle所提供的日期时间函数,以及在SQL语句和PL/SQL块中使用这些函数的方法。
ADD_MONTHS(d,n):该函数用于返回特定日期时间 d 之后(或之前)的n个月所对应的日期时间(n为正整数表示之后,n为负整数表示之前).示例如下:
SQL> set serveroutput on; SQL> SQL> DECLARE 2 v_date DATE; 3 BEGIN 4 v_date:=add_months(sysdate,-12); 5 dbms_output.put_line('当前日期前14个月所对应的日期:'||v_date); 6 END; 7 8 / 当前日期前14个月所对应的日期:05-7月 -12 PL/SQL procedure successfully completed
TRUNC(d,[fmt]) :该函数用于截取日期时间数据.如果fmt指定年度,则结果为本年度的1月1日;如果fmt指定月,则结果为本月1日。示例如下:
----------月 SQL> select trunc(sysdate,'MONTH') from dual; TRUNC(SYSDATE,'MONTH') ---------------------- 2013/7/1 SQL> select trunc(sysdate,'mm') from dual; TRUNC(SYSDATE,'MM') ------------------- 2013/7/1 ----------年 SQL> select trunc(sysdate,'YY') from dual; TRUNC(SYSDATE,'YY') ------------------- 2013/1/1 SQL> select trunc(sysdate,'YEAR') from dual; TRUNC(SYSDATE,'YEAR') --------------------- 2013/1/1
MOTNS_BETWEEN(d1,d2):该函数用于返回d1和d2之间相差的月数.如果d1小于d2,则返回负数;如果d1和d2的天数相同,或都是月底,则返回整数;否则Oracle以每月31天为准来计算结果的小数部分。示例如下:
SQL> select months_between(sysdate,'6-7月-1998') from dual; MONTHS_BETWEEN(SYSDATE,'6-7月- ------------------------------ 180
NEXT_DAY(d,char):该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。示例如下:
SQL> select next_day(sysdate,'星期日') from dual; NEXT_DAY(SYSDATE,'星期日') -------------------------- 2013/7/7 9:15:51 SQL> select next_day(sysdate,'星期一') from dual; NEXT_DAY(SYSDATE,'星期天') -------------------------- 2013/7/8 9:15:11
4、转换函数
转换函数用于将数值从一种数值类型转换为另一种数据类型。在某些情况下,Oracle Server会隐含地转换数据类型。但在编写应用程序时,为了防止出现编译错误,如果数据类型不同,那么应该使用转换函数进行类型转换.下面详细介绍Oracle所提供的转换函数,以及在SQL语句和PL/SQL块中使用这些转换函数的方法。
TO_CHAR(data[,fmt[,nls_param]]) :该函数用于将日期值转变为字符串,其中fmt用于指定日期格式,nls_param用于指定nls参数。示例如下:
SQL> select to_char(sysdate,'YYYY-MM-DD') from dual; TO_CHAR(SYSDATE,'YYYY-MM-DD') ----------------------------- 2013-07-06
TO_CHAR(n[,fmt[,nls_param]]):用于将数字值转换为VARCHAR2数据类型.示例如下:
SQL> select to_char(100) from dual; TO_CHAR(100) ------------ 100
TO_DATE(char[,fmt[,nls_param]]):该函数用于将符合指定日期的函数转变为DATE类型的数值,示例如下:
SQL> select TO_DATE('01-01-2001','DD-MM-YYYY') from dual; TO_DATE('01-01-2001','DD-MM-YY ------------------------------ 2001/1/1 SQL> select TO_DATE('2001-01-01','YYYY-MM-DD') from dual; TO_DATE('2001-01-01','YYYY-MM- ------------------------------ 2001/1/1
附录:关于Decode函数
DECODE是Oracle公司独家提供的功能,它是一个功能很强的函数。它虽然不是SQL的标准,但对于性能非常有用。到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准。实际上,这种批评有些片面或不够水平。就象有些马车制造商抱怨亨利。福特的“马车”不标准一样。
1、DECODE 中的if-then-else逻辑
在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
需要注意的是,这里的if、then及else 都可以是函数或计算表达式。
2 DECODE 的简单例子
Oracle系统中就有许多数据字典是使用decode 思想设计的,比如记录会话信息的V$SESSION数据字典视图就是这样。我们从《Oracle8i/9i Reference》资料中了解到,当用户登录成功后在V$SESSION中就有该用户的相应记录,但用户所进行的命令操作在该视图中只记录命令的代码(0—没有任何操作,2—Insert…),而不是具体的命令关键字。因此,我们需要了解当前各个用户的名字及他们所进行的操作时,要用下面命令才能得到详细的结果:
select sid,serial#,username, DECODE(command, 0,’None’, 2,’Insert’, 3,’Select’, 6,’Update’, 7,’Delete’, 8,’Drop’, ‘Other’) cmmand from v$session where username is not null;
3 DECODE实现表的转置
数据库中的表是由列和行构成的一个二维表。一般列在任何数据库中都是有限的数量,而行的变化较大,如果表很大,行的数量可能大上千万行。同一列的不同行可能有不同的值,而且不是预先定义的。
例:住房公积金报表置换实例:
1.各个单位在本地经办行进行开户,开户就是将单位的基本信息和职工信息的进行登记;
2.每月各个单位的会计到经办行交缴本单位的所有职工的住房公积金,系统记录有每个职工的交缴明细并在每条记录上记录有经办行的代码;
3.每月、季、半年及年终都要求将经办行 变为“列”给出个月的明细报表:
经办行:城西区城东区
月份:
2001.01 xxxx1.xx xxxxx2.xx
2001.02 xxxx3.xx xxxxx4.xx
。 。 。 。 。 。
原来的数据顺序是:
城西区2001.01 xxxxx1.xx
城东区2001.01 xxxxx2.xx
城西区2001.02 xxxxx3.xx
城东区2001.02 xxxxx4.xx
住房公积金系统记录职工的每月交缴名细的pay_lst表结构是:
bank_code varchar2(6)NOT NULL, -- 经办行代码
acc_no varchar2(15) not null, -- 单位代码(单位帐号)
emp_acc_no varchar2(20) not null, -- 职工帐号
tran_date date not null, -- 交缴日期
tran_val Number(7,2) not null, -- 交缴额
sys_date date default sysdate, --系统日期
oper_id varchar2(10) --操作员代码
这样的表结构,一般按照将经办行作为行(row)进行统计是很容易的,但是如果希望将经办行变为列(column)这样的格式来输出就有困难。如果用DECODE函数来处理则变得很简单:
我们创建一个视图来对目前的pay_lst表进行查询。将经办行代码变为一些具体的经办行名称即可:
CREATE OR REPLACE VIEW bank_date_lst AS
Select to_char(tran_date,’yyyy .mm’),
SUM( DECODE ( bank_code,’001’, tran_val,0 )) 城西区,
SUM( DECODE ( bank_code,’002’, tran_val,0 )) 城南区,
SUM( DECODE ( bank_code,’003’, tran_val,0 )) 城东区
FROM pay_lst
GROUP BY to_char(tran_date,’yyyy .mm’);
建立视图后,可直接对该视图进行查询就可按照列显示出结果。
简单应用:
如果字段a值为null,则替换为0
decode(a,Null,0,a) a字段如果为null,则替换为0,如果不为null,则为a[1]

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能