您的位置:首页 > 数据库 > Oracle

Oracle 基础笔记1

2015-08-18 14:09 561 查看
select sysdate from dual;/* 系统时间*/

/* 创建表 */

create TABLE teachers(

teacher_id NUMBER(5) CONSTRAINT teacher_pk PRIMARY KEY,

monitor_id NUMBER(5),

name VARCHAR2(10) NOT NULL,

sex Varchar2(6) CONSTRAINT tsex_chk CHECK(SEX IN ('男','女')),

bod varchar2(10) DEFAULT 11

);

comment on table teachers is '教师表'; /* 表名备注*/

create TABLE students(

student_id NUMBER(5) CONSTRAINT student_pk PRIMARY KEY,

tea_id NUMBER(5),

monitor_id NUMBER(5),

name VARCHAR2(10) NOT NULL,

sex Varchar2(6) CONSTRAINT sex_chk CHECK(SEX IN ('男','女')),

bod varchar2(10) DEFAULT 11

);

comment on table students is '学生表'; /* 表名备注*/

comment on column students.student_id is '学生ID'; /* 字段备注*/

alter table students

add constraint FK_stu_tea foreign key (tea_id)

references teachers (teacher_id); /* 外键关联*/

/* 查看表结构 */

DESCRIBE students

/* 删除表 */

drop table students;

/* 添加数据 */

insert into students VALUES (1,1,2,'3','男','5');

insert into students VALUES (2,2,3,'3','女','5');

insert into students VALUES (3,1,4,'3','男','5');

insert into students VALUES (4,2,5,'人','男','5');

insert into students VALUES (5,1,3,'啊','女','5');

insert into students VALUES (6,2,4,'吧','男','5');

insert into students VALUES (7,4,5,'才','男','5');

insert into students VALUES (8,4,5,'人','男','5');

insert into students VALUES (9,1,3,'啊','女','5');

insert into students VALUES (10,3,4,'人','男','5');

insert into students VALUES (11,1,5,'才','男','5');

insert into students VALUES (12,3,5,'人','男','5');

insert into students VALUES (13,4,3,'啊','女','5');

insert into students VALUES (14,4,4,'人','男','5');

insert into teachers VALUES (1,2,'语文','男','5');

insert into teachers VALUES (2,3,'数学','女','5');

insert into teachers VALUES (3,4,'英语','男','5');

insert into teachers VALUES (4,4,'Java','男','5');

/* 查看数据 */

select * from students;

/* 删除表数据 */

delete FROM students;

/* 重复记录行(DISTINCT) */

select distinct sex from students;

/* 使用字符串连接 */

select name||'生日是:'||sex AS "学生生日清单" from students;

/* 使用算术表达式 (可使用含有加、减、乘、除运算符的算术表达式)*/

select name AS "姓名", student_id+monitor_id AS "总和" from students;

/* 空值处理(NVL(A,B)函数:A为字段,当A为Null时返回值B)*/

select name AS "姓名", NVL(student_id,0)+monitor_id AS "总和" from students;

/* 空值处理(NVL2(A,B,C)函数:A为字段,当A为Null时返回值C,当A不为Null时返回值B)*/

select name AS "姓名", NVL(student_id,student_id+monitor_id,0) AS "总和" from students;

/* 空值处理 COALESCE(A,B,...)函数:返回第一个非Null值,如果全为空值则返回空值*/

select name AS "姓名", COALESCE(student_id+monitor_id,sex) AS "总和" from students;

/* 简单条件查询 */

/* In 在指定集合中 column In(100,200);

Not In 不在指定集合中 column Not In(100,200);



Between And 在指定范围内 column Between 1000 And 2000;

Not Between And 不在指定范围内 column Not Between 1000 And 2000;



Like 与指定模式匹配 column Like '人%' (%:表示0个或多个字符;_ ;表示单个字符)

Not Like 不与指定模式匹配 column Not Like '人%'



Is Null 是Null值 column Is Null

Is Not Null 是Null值 column Is Not Null



And 逻辑与、Or 逻辑或、Not 逻辑非



= 等于、> 大于 、>= 大于等于、< 小于、<= 小于等于、<> or != 不等于

*/

select * From students where student_id=1 and name='3';

/* 记录排序(升序为ASC,降序为DESC,默认为ASC) */

select * From students Order by student_id ASC;/* 单列排序*/

select * From students Order by student_id,name DESC; /* 多列排序*/

/* 分组查询*/

/* 列(Aggregate)函数

MAX(column) 列中的最大值

MIN(column) 列中的最小值

COUNT(*)表中行的总数

COUNT(column) 列不为Null的行数

COUNT(distinct column) column指定列中相异值的数量

SUM(column) 列中所有值的总和

***G(column) 列中所有值的平均数

STDDEV(column) 列的标准偏差

VARIANCE(column) 列的方差

*/

select ***G(student_id) from students;

select Count(*) from students;

select sum(student_id) from students;

select Max(student_id),Min(student_id) from students;

/* 单列分组查询*/

select name from students Group by name

/* 多列分组查询*/

select name,sex from students Group by name, sex;

select name,count(*) from students Group by name;

/* Having子句 group by子句用于指定分组的依据,而Having子句则指定条件*/

select name,sex from students Group by name, sex Having sex = '男';

select name,count(*) from students Group by name Having count(*) > 1 order by count(*);

/* 子查询*/

/* 单行子查询*/

select * from students where monitor_id < (select ***G(monitor_id) from students);

select * from students where monitor_id < (select monitor_id from students where student_id=4);

select name,sex from students Group by name, sex Having sex = (select sex from students where student_id=4);

select * from (select * from students where student_id>4);

/* 多行子查询 (当where子句使用多行子查询时,必须要使用多行比较符In、Any或 All )*/

/* In 匹配于子查询的任意一个值,结果为真;否则为假;

Any 只要符合子查询结果的任意一个值,结果为真;否则为假;

All 必须要符合子查询结果的所有值结果为真;否则为假;

*/

select * from students where monitor_id In (select monitor_id from students where student_id<4);

select * from students where monitor_id < Any (select monitor_id from students where student_id<8);

select * from students where monitor_id > All (select monitor_id from students where student_id<5);

/* 多列子查询*/

select * from students where (monitor_id,sex)=(select monitor_id,sex from students where student_id = 4 );

select * from students where (name,monitor_id)In (select name,MIN(monitor_id) from students Group by name);

/* 相关子查询 */

/* Exists 用于检查子查询返回的记录行是否存在*/

select teacher_id, name from teachers t where exists (select 2 from students s where s.student_id=t.teacher_id);

select teacher_id, name from teachers t where not exists (select 2 from students s where s.student_id=t.teacher_id);

select student_id, name from students where tea_id in (select teacher_id from teachers where teacher_id >2)

/* 嵌套子查询*/

select * from (select * from students where tea_id = (select teacher_id from teachers where name='语文'))

/* 集合操作*/

/* 集合操作有并、交、差这3种运算,分别为Union(Union All)、Intersect、Minus

Union 用于得到2个查询结果集的并集,并集中自动去掉重复行;

Union All 用于得到2个查询结果集的并集,并集中保留重复行;

Intersect:用于得到2个查询结果集的交集,交集以结果的第一列进行排序;

Minus:用于得到2个查询结果集的差集,差集以结果的第一列进行排序

*/

select student_id, name from students Union all select teacher_id, name from teachers;

select student_id, name from students Union all select teacher_id, name from teachers

/* 显式事务*/

COMMIT /*提交事务*/

ROLLBACK /*撤销全部事务*/

ROLLBACK TO S***EPOINT_NAME /*撤销保留点以后的部分事务*/

S***EPOINT sp1;/* 设置保留点sp1*/

/* 隐式事务*/

当执行DDL语句、DCL语句和正常退出SQL*Plus时,Oracle系统自动提交COMMIT

/* 特殊事务*/

只读事务 set transaction read only

顺序事务 set transaction isolation level serializable

/* SQL函数*/

/* 数字函数*/

ABS(x) 得到x的绝对值.

ACOS(x) 返回x的反余弦值. x应该从0到1之间的数,结果在0到pi之间,以弧度为单位.

ASIN(x) 计算x的反正弦值. X的范围应该是-1到1之间,返回的结果在-pi/2到pi/2之间,以弧度为单位.

ATAN(x) 计算x的反正切值.返回值在-pi/2到pi/2之间,单位是弧度.

ATAN2(x,y) 计算x和y的反正切值.结果在负的pi/2到正的pi/2之间,单位是弧度.

CEIL(x) 计算大于或等于x的最小整数值.

COS(x) 返回x的余弦值. X的单位是弧度.

COSH(x) 计算x的双曲余弦值.

EXP(x) 计算e的x次幂. e为自然对数,约等于2.71828.

FLOOR(x) 返回小于等于x的最大整数值.

LN(x) 返回x的自然对数. x必须是正数,并且大于0

LOG(x) 计算以x为底的y的对数.底必须大于0而且不等于1, y为任意正数.

MOD(x,y) 返回x除以y的余数.如果y是0,则返回x

POWER(x,y) 计算x的y次幂.

ROUND(x[,y]) 计算保留到小数点右边y位的x值. y缺省设置为0,这会将x保留为最接近的整数.如果y小于0,保留到小数点左边相应的位. Y必须是整数.

SIGN(x) 获得x的符号位标志.如果x<0返回-1.如果x=0返回0.如果x>0返回1.

SIN(x) 计算x的正弦值. X是一个以弧度表示的角度.

SINH(x) 返回x的双曲正弦值.

SQRT(x) 返回x的平方根. x必须是正数.

TAN(x) 计算x的正切值, x是一个以弧度位单位的角度.

TANH(x) 计算x的双曲正切值.

TRUNC(x[,y]) 计算截尾到y位小数的x值. y缺省为0,结果变为一个整数值.如果y是一个负数,那么就截尾到小数点左边对应的位上.

/* 字符函数*/

--1: ASCII

返回字符串的ASCII值 

SELECT ASCII('A') FROM DUAL;

SELECT ASCII('a') FROM DUAL;

--2: CHR

返回整数所对应的ASCII字符

SELECT CHR('65') FROM DUAL;

SELECT CHR(400) FROM DUAL; --如果超出ACII值,则返回空

--3: CONCAT 函数

连接字符串A和字符串B

SELECT CONCAT('您好', '欢迎来到ORACLE世界') AS TEXT FROM DUAL;

--3.1 如果要连接表里面的两个字段可以用||

SELECT TYPECODE || '____' || TYPE_NAME AS "TYPE" FROM USER_TYPES;

--4: INITCAP

返回字符串并将字符串的第一个字母变为大写;

--Q 是否每个单词的第一个字母都会变成大些? 全部单词的首字母大写

SELECT INITCAP('your didn''t try your best') FROM DUAL;

--5: LENGTH

返回字符串的长度;

--Q:返回表某条数据某个列实际长度,如果该表没有数据,返回0

SELECT LENGTH(TYPE_NAME) FROM USER_TYPES

--6: LOWER

返回字符串,并将所有的字符小写

SELECT LOWER('AbcDedf Gbad') FROM DUAL;



--7: UPPER

返回字符串,并将所有的字符大写

SELECT UPPER('abcdEf') FROM DUAL;

--8: LTRIM(X,[TRIM_STRING])

LTRIM 删除左边出现的字符串, 默认为空字符串

SELECT LTRIM(' hello world!') FROM DUAL;

SELECT LTRIM('hello, world', 'hello') FROM DUAL;

--9: RTRIM(X, [TRIM_STRING])

RTRIM 删除右边出现的字符串TRIM_STRING,默认为空字符串。

SELECT RTRIM('hello world! ') FROM DUAL;

--10: SUBSTR(string,start,count)

取子字符串,从start开始,取count个

SELECT SUBSTR('you are right!, come on', 3, 30) FROM DUAL;

--11: INSTR(C1,C2,I,J)

在一个字符串中搜索指定的字符,返回发现指定的字符的位置;

C1 被搜索的字符串

C2 希望搜索的字符串

I 搜索的开始位置,默认为1

J 出现的位置,默认为1

SELECT INSTR('HELLO WORLD! WELCOME', 'WORLD', 1) FROM DUAL;

--12: RPAD

RPAD 在列的右边粘贴字符

--注意长度值并不是粘贴字符的长度,而是整个字符串的长度,如果长度小于原始字符串

--SELECT RPAD('HELLO', 4, '*') FROM DUAL; 的值为HELL

SELECT RPAD('HELLO', 10, '*') FROM DUAL;

SELECT RPAD('HELLO', 10, 'E') FROM DUAL;

--13: LPAD

LPAD 在列的左边粘贴字符

--N: 注意的问题同上

SELECT LPAD('WELCOME', 20, 'HELLO') FROM DUAL;

--14: REPLACE('string','s1','s2')

string 希望被替换的字符或变量

s1 被替换的字符串

s2 要替换的字符串

SELECT REPLACE('HE LOVE YOU', 'HE' ,'I') FROM DUAL;

--15: SOUNDEX

返回一个与给定的字符串读音相同的字符串

SQL> create table table1(xm varchar(8));

SQL> insert into table1 values('weather');

SQL> insert into table1 values('wether');

SQL> insert into table1 values('gao');

--16.TRIM('s' from 'string')

LEADING 剪掉前面的字符

TRAILING 剪掉后面的字符

如果不指定,默认为空格符

SELECT TRIM('Y' FROM 'YOU') FROM DUAL;

--17: NVL(X, VALUE)

如果X是空值,返回VALUE,否则返回X

SELECT NVL(NULL, '2') FROM DUAL;

SELECT NVL('33', '2') FROM DUAL;

--18: NVL2(X, VALUE1, VALUE2)

如果X是空值,返回VALUE1, 否则返回VALUE2

SELECT NVL2(NULL, '3', '4') FROM DUAL;

--19: NANVI(X, VALUE)

如果X不是数字,那么返回VALUE,否则返回X

SELECT NANVI('3DF', '34') FROM DUAL; --不知是否是ORACLE 11里面出现的。

----------------------------------------------------------------------------------------------------

/* 日期时间函数*/

---------------------------------------------日期/时间函数-----------------------------------------------

--1: SYSDATE

用来得到系统的当前日期

SELECT SYSDATE FROM DUAL;

--2: ADD_MONTHS

增加或减去月份

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20080818','YYYYMMDD'),2), 'YYYY-MM-DD') FROM DUAL;

SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL

--3: LAST_DAY

返回日期的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -2)) FROM DUAL;

--4: MONTHS_BETWEEN(date2,date1)

给出date2-date1的月份

--参数的格式需要注意

SELECT MONTHS_BETWEEN(TO_DATE('2011-05-03', 'YYYY-MM-DD'), TO_DATE('2011-01-23', 'YYYY-MM-DD')) FROM DUAL;

SELECT MONTHS_BETWEEN('19-12月-1999','19-3月-1999') mon_between FROM DUAL;

--SELECT MONTHS_BETWEEN('2011-1月-23', '2011-9月-1') FROM DUAL; 文字与格式字符串不匹配

--5: NEW_TIME(date,'this','that')

给出在this时区=other时区的日期和时间

SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD HH24:MI:SS') BeiJing_Time,

TO_CHAR(NEW_TIME(SYSDATE, 'PDT', 'GMT'), 'YYYY.MM.DD HH24:MI:SS') LOS_ANGELS FROM DUAL;



简写 时区

AST OR ADT 大西洋标准时间

HST OR HDT 阿拉斯加—夏威夷时间

BST OR BDT 英国夏令时

MST OR MDT 美国山区时间

CST OR CDT 美国中央时区

NST 新大陆标准时间

EST OR EDT 美国东部时间

PST OR PDT 太平洋标准时间

GMT 格伦威治标准时间

YST OR YDT Yukon标准时间



--6: NEXT_DAY

返回与制定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。

--星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7

SELECT NEXT_DAY(SYSDATE, 2) FROM DUAL;

--7: CURRENT_DATE

当前会话时区中的当前日期

SELECT CURRENT_DATE FROM DUAL;

--8: CURRENT_TIMESTAMP

以timestamp with time zone数据类型返回当前会话时区中的当前日期

SELECT CURRENT_TIMESTAMP FROM DUAL;

--9: DBTIMEZONE()

返回时区

SELECT DBTIMEZONE FROM DUAL;

--10: SESSIONTIMEZONE

返回回话时区 其中DBTIMEZONE是数据库的,session是针对当前会话的,因为时区在会话级可以改变

SELECT SESSIONTIMEZONE FROM DUAL;

ALTER SESSION SET TIME_ZONE = '8:00';

SELECT SESSIONTIMEZONE FROM DUAL;

--11:EXTRACT

找出日期或间隔值的字段值

SELECT EXTRACT(MONTH FROM SYSDATE) "MONTH" FROM DUAL;

SELECT EXTRACT(DAY FROM SYSDATE) AS "DAY" FROM DUAL;

SELECT EXTRACT(YEAR FROM SYSDATE) AS "YEAR" FROM DUAL;

--12:LOCALTIMESTAMP

返回会话中的日期和时间

SELECT LOCALTIMESTAMP FROM DUAL;

--13: TRUNC(for dates)  TRUNC函数为指定元素而截去的日期值。  其具体的语法格式如下:  TRUNC(date[,fmt])  其中:  date 一个日期值  fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去  下面是该函数的使用情况:  TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am')  ='24-Nov-1999 12:00:00 am'  TRUNC(TO_DATE('24-Nov-1999
08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am'  SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL; --返回当年第一天.  SELECT TRUNC(SYSDATE,'MM') FROM DUAL; --返回当月第一天.  SELECT TRUNC(SYSDATE,'D') FROM DUAL; --返回当前星期的第一天.  SELECT TRUNC(SYSDATE,'DD') FROM
DUAL;--返回当前年月日

---- 上月最后一天

SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYY/MM/DD') FROM DUAL;

----: 上各月的今天

SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL;

---- 上个月第一天

SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),'YYYY-MM-DD') FirstDay FROM DUAL;

--- 按照每周进行统计

SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;

--- 按照每月进行统计

SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;

---- 按照每季度进行统计

SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;

--- 按照每年进行统计

SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL;

--- 要找到某月中所有周五的具体日期

SELECT TO_CHAR(T.D, 'YY-MM-DD')

FROM

(

SELECT TRUNC(SYSDATE, 'MM') + ROWNUM -1 AS D

FROM DBA_OBJECTS

WHERE ROWNUM < 32

) T

WHERE TO_CHAR(T.D, 'MM') = TO_CHAR(SYSDATE, 'MM')

AND TRIM(TO_CHAR(T.D, 'DAY')) = '星期五'

下面的内容应该属于格式化函数,但是为了对日期函数做详细叙述,就把TO_CHAR的内容放到这里了

Y或YY或YYY 年的最后一位,两位或三位

SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;

SYEAR或YEAR SYEAR使公元前的年份前加一负号

SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL; --TWENTY ELEVEN

Q 季度,1~3月为第一季度

SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 2表示第二季度

MM 月份数

SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; --04表示4月

RM 月份的罗马表示

SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL; --IV表示4月

Month 用9个字符长度表示的月份名

SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL; -- 4月

WW 当年第几周

SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- 24表示2002年6月13日为第24周

W 本月第几周

SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL; -- 2011年04月26日为第4周

DDD 当年第几天. 1月1日为001,2月1日为032

SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;

DD 当月第几天

SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;

D 周内第几天

SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;

DY 周内第几天缩写

SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;

HH或HH12 12进制小时数

SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;

HH24 24小时制

SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;

MI 分钟数(0~59)

SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;

提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

SS 秒数(0~59)

SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;

--------------------------------------------------------------------------------------

/* 转换函数*/

------------------------------------------类型转换函数----------------------------------------------

--自动类型转换, ORACLE 可以自动根据具体情况进行如下转换:

*字符串到数值

*字符串到日期

*数值到字符串

*日期到字符串

EX:

--*字符串到数值

SELECT '3.14159' + 20 FROM DUAL;

SELECT '3.1T' + 20 FROM DUAL; --报错:无效数字,即字符串必须能转换为数值类型才能进行操作

--*数值到字符串

SELECT '100' || 124 FROM DUAL;

--1: TO_CHAR(DATE,'FORMAT')

把对应的数据转换为字符串类型

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

SELECT TO_CHAR(SAL) FROM SCOTT.EMP;

SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;

Y或YY或YYY 年的最后一位,两位或三位

SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;

SYEAR或YEAR SYEAR使公元前的年份前加一负号

SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL; --TWENTY ELEVEN

Q 季度,1~3月为第一季度

SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 2表示第二季度

MM 月份数

SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; --04表示4月

RM 月份的罗马表示

SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL; --IV表示4月

Month 用9个字符长度表示的月份名

SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL; -- 4月

WW 当年第几周

SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- 24表示2002年6月13日为第24周

W 本月第几周

SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL; -- 2011年04月26日为第4周

DDD 当年第几天. 1月1日为001,2月1日为032

SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;

DD 当月第几天

SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;

D 周内第几天

SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;

DY 周内第几天缩写

SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;

HH或HH12 12进制小时数

SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;

HH24 24小时制

SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;

MI 分钟数(0~59)

SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;

提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

SS 秒数(0~59)

SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;



--2: TO_DATE(STRING,'FORMAT')

将字符串转化为ORACLE中的一个日期

SELECT TO_DATE('2011-03-24', 'YYYY/MM/DD') FROM DUAL; --格式化后依然为 2011-3-24, 很是纳闷,自己查资料解决这个问题

SELECT TO_DATE('2011/03/24', 'YYYY-MM-DD') FROM DUAL;

--3: TO_NUMBER

将给出的字符转换为数字

SELECT TO_NUMBER('2008') AS Year FROM DUAL;

--4: RUNC(for number)

按照指定的精度截取一个数

TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。

  其具体的语法格式如下

  TRUNC(number[,decimals])

  其中:

  number 待做截取处理的数值

  decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分

SELECT TRUNC(314.14159234, -2) AS FirstNumber, TRUNC(314.14159234,2) FROM DUAL;

--5: CHARTOROWID

把包含外部格式的ROWID的CHAR或VARCHAR2数值转换为内部的二进制格式.参数string必须是包含外部格式的ROWID的18字符的字符串.

oracle7和 oracle8中的外部格式是不同的.CHARTOROWID是ROWIDTOCHAR的反函数.

SELECT ROWID, CHARTOROWID('adcddfADGEDGJGFRYJ'), ENAME FROM SCOTT.EMP;

--6: ROWIDTOCHAR

将ROWID数据类型转换为字符类型

将ROWID类型的数值rowid转换为其外部的18字符的字符串表示,在oracle7和oracle8之间有些不一样的地方. ROWIDTOCHAR和CHARTOROWID是两个相反的函数.

SELECT ROWID, ROWIDTOCHAR(ROWID), ENAME FROM SCOTT.EMP

--7: CONVERT(c,dset,sset)

将源字符串 sset从一个语言字符集转换到另一个目的dset字符集

SELECT CONVERT('? ê í ó ? A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;

--8:HEXTORAW

将一个十六进制构成的字符串转换raw

SELECT HEXTORAW('324') FROM DUAL;

--9: RAWTOHEX

将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.

SELECT RAWTOHEX('11') FROM DUAL;



--10: TO_MULTI_BYTE

将字符串中的单字节字符转化为多字节字符

即将指定字符转换为全角并返回char类型字串

SELECT TO_MULTI_BYTE('ABC abc 中华') FROM DUAL;

SELECT TO_MULTI_BYTE('AFDB') FROM DUAL;

--11: DUMP(s,fmt,start,length)

DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值

dump是个功能非常强悍的函数,对于深入了解oracle存储的人而言相当有用。所以对于我们这些仅仅只是应用的人而言就不知道能将其应用于何处了。此处仅介绍用法,不对其功能做深入分析。



如上所示,dump拥有不少参数。其本质是以指定格式,返回指定长度的exp的内部表示形式的varchar2值。fmt含4种格式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。

start参数表示开始位置,length表示以,分隔的字串数。

例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;

--12: EMPTY_BLOB()

这两个函数都是用来对大数据类型字段进行初始化操作的函数

--13: EMPTY_CLOB()

-----------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: