oracle学习笔记-命令和函数
以下是我这几天学习oracle的笔记,有些凌乱,整理出来,也算是个复习
命令符 |
使用格式 |
说明 |
示例 |
Desc |
Desc 表名 |
显示表结构 |
Desc bk_bookinfo |
Set line |
Set line n |
将屏幕的输出置为n个字符宽 |
Set line 100 |
L |
L |
显示sql缓冲区的内容 |
L |
N |
N text |
N为在SQL缓冲区的语句行号 Text为替代出错的sql语句 |
2 from studentinfo |
/ |
/ |
运行sql缓冲区的语句 |
/ |
n |
n |
把缓冲区第n行作为当前行 |
3 |
A |
A text |
把text 增加到当前sql缓冲区后 |
A ,bookname |
del |
Del (n) |
删除缓冲区第n行,无参数则删除当前行 |
Del 4 |
c |
C /原文/新的正文 |
修改缓冲区中的sql语句 注意先用 n命令定位到当前行 |
C /tmp/dept |
save |
Save filepath |
将sql缓冲区语句存入指定文件 |
Save c:\1.sql |
Get |
get filepath |
将脚本文件装载到sql缓冲区 |
Get c:\1.sql |
Edit |
Edit (filepath) |
编辑脚本文件(缓冲区sql语句) |
Edit 或edit c:\1.sql |
@ |
@ filepath |
直接运行脚本文件 |
@ c:\1.sql |
1.导出oracle数据
新建c:\test.sql 键入
Set line 120
Set pagesize 10000
Set heading off
Spool c:\data.txt
Select bookID||’,’||bookname from bb_bookinfo;
Spool off
在sql> @ c:\test.sql
2.自动化导出数据
新建 c:\auto.bat 键入
Sqlplus /nolog @ 1.sql
Exit
注意这里sqlplus和@命令必须在一行,我第一次没有执行找了半天,问题就出现在此
C:\1.sql
Set termout off
connect scott/tiger@orcl-89
set line 120
set pagesize 1000
set heading off
set feedback off
spool c:\data.txt
select bookID||','||name from bk_bookinfo where rownum<100;
spool off
exit
函数名 |
用法 |
说明 |
示例 |
lower |
Lower(列名|表达式) |
把字符转换成小写 |
Lower(‘THIS IS’) |
Upper |
Upper (列名|表达式) |
把字符转换成大写 |
Upper(‘this is’) |
Initcap |
Initcap (列名|表达式) |
把每个字头一个字母大写 |
Initcap(‘this is test’) |
concat |
Concat(列名|表达式. 列名|表达式) |
把第一个字符串和第二个字符串链接 |
Concat(‘a’,’b’) |
substr |
Substr(列名|表达式,m,[n]) |
返回指定字符 |
Substr(‘abc’,3,1) |
Instr |
Instr(列名|字符串,’字符串’,[m],[n]) |
返回所给字符串的数字位 |
Instr(‘abcd’,’A’) 返回0 返回2 |
Length |
Length(列名| 字符串) |
返回表达式字符长度 |
Length(‘aabcde’) |
ltrim |
Ltrim(列名| 字符串) |
去掉表达式左侧空格 |
Ltrim(‘ aaa’) |
rtrim |
Rtrim(列名|字符串) |
去掉表达式右侧空格 |
Rtrim(‘aaa ’) |
trim |
Trim(列名|表达式) |
去掉表达式两侧空格 |
Trim(‘ aaa ’) |
Trim([leading|trailing|both]要去掉的字符 from 源字符串) |
去掉表达式中的指定字符 |
Trim(‘?’ from ‘?aa?’) 结果aa Trim(leading ‘?’ from ‘?aa?’); aa? | |
round |
Round(列名|表达式,n) |
将表达式的数值四舍五入到小数点n位 |
Round(168.88,1) |
trunc |
Trunc(列名|表达式,n) |
将表达式的数值截取到小数点后n位 |
Trunk(168.88,1) |
mod |
Mod(m,n) |
m/n后的余数 |
Mod(6/7) |
日期函数:
to_date(列名|字符串,[格式])
格式说明:
Year:
yy two digits 两位年 显示值:07
yyy three digits 三位年 显示值:007
yyyy four digits 四位年 显示值:2007
Month:
mm number 两位月 显示值:11
mon abbreviated 字符集表示 显示值:11月,若是英文版,显示nov
month spelled out 字符集表示 显示值:11月,若是英文版,显示november
Day:
dd number 当月第几天 显示值:02
ddd number 当年第几天 显示值:02
dy abbreviated 当周第几天简写 显示值:星期五,若是英文版,显示fri
day spelled out 当周第几天全写 显示值:星期五,若是英文版,显示friday
Hour:
hh two digits 12小时进制 显示值:01
hh24 two digits 24小时进制 显示值:13
Minute:
mi two digits 60进制 显示值:45
Second:
ss two digits 60进制 显示值:25
其它
Q digit 季度 显示值:4
WW digit 当年第几周 显示值:44
W digit 当月第几周 显示值:1
1. 日期和字符转换函数用法(to_date,to_char)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月
select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日
select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时
select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分
select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual;
2求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
3查找月份。
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
2.Months_between(日期1,日期2)
返回日期1和日期2之间的月数
select months_between(
to_date('2010-2-1','yyyy-mm-dd'),
to_date('2010-3-1','yyyy-mm-dd')
) from dual;
结果:-1
3.Add_months(日期,n)
把n个月加到日期上
select add_months(sysdate,'1') from dual;
结果:2010-9-24 15:53:12
4.Next_day(日期,字符串)
返回下一个由字符串(星期几)指定的日期
select next_day(to_date('2010-2-1','yyyy-mm-dd'),'星期一') from dual;、
结果:2010-2-8
注意:因为安装时中文的oracle 所以这里要用星期一
5.Last_day(日期)
返回该日期所在月份的最后一天
select last_day(to_date('2010-2-1','yyyy-mm-dd')) from dual;
结果:2010-2-28
6、to_char(日期,格式)
格式:
Yyyy:完整的年份
Year:年份的英文表示
MM:两位数表示月份
Month:月份完整的英文表示
Dy:用3个英文字符缩写表示星期几
Day: 星期几的完整英文表示
DD:几号的数字表示
select to_char(to_date('2010-2-1','yyyy-mm-dd'),'dy') from dual;
结果:星期一
select to_char(to_date('2010-2-1','yyyy-mm-dd'),'yyyy') from dual;
结果:2010
select to_char(to_date('2010-2-1','yyyy-mm-dd'),'year') from dual;
结果:twenty ten
select to_char(to_date('2010-2-1','yyyy-mm-dd'),'month') from dual;
结果:2月
7.To_char(数字,格式)
格式:
9:一位数字
0:显示前导零
$:显示美元符号
L: 显示本地货币符号
.:显示小数点
,:显示千位符
MI: 在数的右边显示减号
PR:把复数用尖括号括起来
select to_char(20,9) from dual;
结果:##
select to_char(2,9) from dual;
结果:2
select to_char(3434,9999.99) from dual;
结果:3434.00
select to_char(3434,9999.90) from dual;
结果:3434.0
select to_char(03434,'L99999.00') from dual;
结果: ¥3434.00
select to_char(03434,'L09999.00') from dual;
结果: ¥03434.00
select to_char(123,'009') from dual;
结果:123
select to_char(123,'00999') from dual;
结果:00123
select to_char(-123,'999PR') from dual;
结果:<123>
select to_char(-123,'999MI') from dual;
结果:123-
8.To_number(字符串)