使用number类型。定义时这样写,number(6,3)。其中6表示一共6位。3表示有3位是小数。
在龙华等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、成都网站制作 网站设计制作专业公司,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销推广,外贸营销网站建设,龙华网站建设费用合理。
使用函数 add_monthsadd_months(time,months) months为整数,正数时是加月,负数时为减月。UPDATE TABLE ASET LOCALTIME=add_months(LocalTime, 1)
格式化输出
§2.6.1 一般数据的格式化输出
在Oracle的SQL 下,经常用COLUMN 命令来对所输出的列进行格式化,即按照一定的格式进行显示。COLMUN命令语法如下:
COL[UMN] [{ column | expr } [ option_1 ... option_n ] ]
column:列名
expr:有效的 SQL 表达式
option_1... option_n:可以是下列之一:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE {expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE] variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
下面给出常用的关键字的解释:
Alias 给出列的别名,BREAK和COUMN可以引用所定义的别名。
CLEAR 取消列的定义。
FORMAT 列显示格式,format为:
9999990 9或0的个数决定最多显示多少位
9,999,999.99 按照逗号和小数点来显示数据,若是0以空格显示
099999 显示前面补0
$999,999.99 数字前加美圆号
B99999 若为0 ,则结果为空白
99999Mi 若数字为负,则负号放在数字后(右边),缺省放在左边
99999PR 负号将以括号括起
9.999EEEE 以科学记数法表示(必须有4个E)
999V99 数字乘以 10n ,如 1234变为 123400
DATE 采用日期数字格式(MM/DD/YY)
Heading 重新标记列的显示标题,如:
SQL col ename heading 姓名 format a10
SQL select ename,sal from emp;
例子:
SQL
COLUMN SALARY FOR $9,999,999.99
COLUMN LAST_NAME FOR A35.
§2.6.2 日期的格式化输出
Oracle系统提供了一个 NLS_DATE_FORMAT的环境变量来设置日期的显示格式。用它可以完成按照不同格式要求的显示,比如按照中国的习惯为 yyyy年mm月dd日等。
1.系统日期 sysdate 的显示
用sysdate 可以显示ORACLE RDBMS 所在机器的日期及时间,如:
SQL alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"';
会话已更改。
SQL select sysdate from dual;
SYSDATE
------------------
公元2001年05月30日
2.日期类型的显示
select sysdate,to_char(sysdate,’yyyy.mm.dd hh24:mi;ss’) from dual;
SQL connect scott/tiger
已连接。
SQL alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"';
会话已更改。
SQL col HIREDATE heading 生日
SQL col sal heading 工资
SQL col sal ename 姓名
SQL select ename,sal,hiredate from emp;
姓名 工资 生日
---------- ---------- -----------------
SMITH 800 1980年12月17日生
ALLEN 1600 1981年02月20日生
WARD 1250 1981年02月22日生
JONES 2975 1981年04月02日生
MARTIN 1250 1981年09月28日生
BLAKE 2850 1981年05月01日生
CLARK 2450 1981年06月09日生
SCOTT 3000 1987年04月19日生
KING 5000 1981年11月17日生
TURNER 1500 1981年09月08日生
ADAMS 1100 1987年05月23日生
JAMES 950 1981年12月03日生
FORD 3000 1981年12月03日生
MILLER 1300 1982年01月23日生
已选择14行。
§2.7 加标题
有时在输出一些结果时,可能需要加一些标题,如表上面的顶标题,落款等。这样的要求可由Ttitle和Btitle来完成。
ttitle和btitle
ttitle [center|left|right]string 顶标题
btitle [center|left|right]string 底标题
ttitle center 'XX公司人员情况表'
btitle left '制表人:xxxx' right '日期:xxxx年xx月'
Clear ttitle
§2.8 建立简单报告
我们可以用TTITLE、BTITLE、COLUMN、BREAK ON、COMPUTE SUM及SET LINESIZE、SET PAGESIZE、SET NEWPAGE来设置查询结果的显示格式;在用 SPOOL 命令将显示结果输出到一个操作系统文件中去,一般输出文件的类型为.LST。
建立简单报告主要使用下面命令来实现:
1. SPOOL命令
SPOOL filename 将缓冲区的内容写到文件中
SPOOL off 终止写命令
2. COLUMN 命令
column col_name[,heading] format format_spe
把字段的结果指定为一种输出格式
COL name heading '姓名' for a10
COL sal heading '工资' for 9,999.99
3.ttitle、btitle
ttitle [center|left|right]string 顶标题
btitle [center|left|right]string 底标题
ttitle center 'XX公司人员情况表'
btitle left '制表人:赵元杰' right '日期:1998.11月'
Clear ttitle
4.break、compute
clear breaks,clear computes
break on column 在该列上中断
break on row 在每一行上中断
break on Page
break on report
skip n 跳过n行
skip page 跳过未用完的页
compute avg
compute count
compute max
compute min
compute std
compute sum
compute var
compute num 计算所有行
compute sum of sal on deptno
5.set 在报表中的设置
l set termout off、set termout on 命令
l set termout off 常用SPOOL XXX前,即关闭报表在屏幕上的显示(节省时间)
l set termout on 常用SPOOL off之后,即恢复报表在屏幕上的显示
l set ECHO{OFF|ON} 显示执行当中的各命令(即用start 时),set echo 受到 set termout 的影响
l set Lin[esize]{80|integer} 设置行宽度,最大值999
l set pag[esize] {24|integer} 设置页的大小
例子:
SQLCOL ename heading ‘姓名’ for a12
SQLCOL sal heading ‘工资’ for a999,999.99
SQLCOL hiredate heading ‘出生’
SQLSET LINESIZE 200
SQLSET PAGESIZE 60
SQLSPOOL c:\all_emp
SQLselect ename,sal,deptno,hiredate from emp order by deptno;
SQLSPOOL OFF
§2.9 输入变量
Oracle提供一种在处理SQL语句时可以将参数作为变量来对待的技术,即在条件句中可以是变量而不是具体的值,这样的处理就是输入变量。这样做的目的就是可以重复使用同样的语句,每次只要输入相应的值即可。要实现将参数写成为变量,只要在变量前加一个号即可。看下面语句:
Select sid, serial#,username, command from v$session
Where USERNAME = upper(‘usr’);
这样的语句在运行中,系统会自动提示你回答变量的具体值,上面语句运行时提示和回答时显示的信息如下:
SQL Select sid, serial#,username, command from v$session
2 Where USERNAME = upper('usr');
输入 usr 的值: sys
原值 2: Where USERNAME = upper('usr')
新值 2: Where USERNAME = upper('sys')
SID SERIAL# USERNAME COMMAND
---------- ---------- ------------------------------ ----------
7 26 SYS 3
在变量说明中,可以使用多个变量,比如:
Alter system kill session ‘sid,ser’;
或
Alter system kill session ‘会话号,序列号’;
它的运行情况如下:
SQL Select sid, serial#,username, command from v$session;
SID SERIAL# USERNAME COMMAND
---------- ---------- ------------------------------ ----------
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 0
7 26 SYS 3
8 16 ZHAO 0
已选择8行。
SQL Alter system kill session 'sid,ser';
输入 sid 的值: 8
输入 ser 的值: 16
原值 1: Alter system kill session 'sid,ser'
新值 1: Alter system kill session '8,16'
系统已更改。
一般系统缺省下是使用 “” 符号来定义变量,你也可以使用另外的符号来代替,比如不喜欢用 而要用 ?,则有:
SQL set define ?
SQL select sid,serial#,username from v$session where username='?usr';
输入 usr 的值: SYS
原值 1: select sid,serial#,username from v$session where username='?usr'
新值 1: select sid,serial#,username from v$session where username='SYS'
SID SERIAL# USERNAME
---------- ---------- ------------------------------
7 26 SYS
次时由于我们修改了会话环境的参数值,可以用下面命令查看:
SQL show define
select * from A where to_char(日期字段,'yyyymm')=to_char(add_months(sysdate,-1),'yyyymm')
这样试验一下,表名和字段名你替换一下,也就是把A和日期字段这俩地方换一下