1.1.1 oracle去重方法
https://blog.csdn.net/xumajie88/article/details/38756973
1. 用rowid方法
delete from table1 a where rowid !=(select max(rowid)
from table1 b where a.name1=b.name1 and a.name2=b.name2……)
2. 用group by方法
delete from student
group by num
having count(num) >1
3.用distinct方法
1.1.2 日期格式错误
执行第七页的sql,出错。
SELECT last_name
FROM employees
WHERE hire_date = '17-OCT-03' ;
ORA-01843: 无效的月份
01843. 00000 - "not a valid month"
*Cause:
*Action:
修改这个参数nls_date_language
alter session set nls_date_language='AMERICAN';
完成。
1.1.3 单引号与双引号
在ORACLE中,单引号有两个作用:
1:字符串是由单引号引用---字符串引用。
2:转义。
转义时:单引号的使用是就近配对,即就近原则
双引号:
① 表示其内部的字符串严格区分大小写
② 用于特殊字符或关键字
③ 不受标识符规则限制
④ 会被当成一个列来处理
⑤ 当出现在to_char的格式字符串中时,双引号有特殊的作用,就是将非法的格式符包装起来
SELECT last_name, department_id, salary*12
FROM employees
WHERE job_id = '&job_title' ;
以下是2个错误:()
SELECT last_name, department_id, salary*12
FROM employees
WHERE job_id = "&job_title" ;
SELECT last_name, department_id, salary*12
FROM employees
WHERE job_id = &job_title ;
1.1.4 替代变量
执行语句,每次遇到&salary,都需要重新输入值,值可以不一样;
SELECT last_name, department_id,salary+&salary
FROM employees
WHERE salary < &salary
把&&salary换成&salary,执行语句发现,只需要输入一次值。在这个会话中,不需要再次输入。
SELECT last_name, department_id,salary+&&salary
FROM employees
WHERE salary < &&salary;
在同一会话中,执行上一语句后,执行这个语句,发现变量也不需要输入。这是因为变量salary的值已经被定义。
select first_name,salary
from employees
where salary < &salary;
把&&salary的功能等同于define
define salary =3000;
取消已定义的替代变量;
undefine salary;
verify的作用
执行语句。
SQL> select first_name,salary
2 from employees
3 where salary < &salary;
Enter value for salary: 3000
old 3: where salary < &salary
new 3: where salary < 3000
查看verify的设置。如果把verify设为off,红色部分不出现;
SQL> show verify
verify ON
SQL> set verify off
1.1 lession 04
1.1.1 字符函数
lower
upper
initcap
concat ,||
substr
length
instr(指定字符的位置)
lpad,rpad(lpad,从左边取n个字符,不足n个,用空格或第三个参数填充)
trim
replace
select lpad(first_name || last_name,12,'-'),instr(first_name || last_name,'A')
from employees
fetch first 3 row only;
1.1.2 数值函数
round
trunc
ceil
floor
mod
1.1.3 日期函数
参考https://www.cnblogs.com/aipan/p/8080151.html
select sysdate from dual;
dual是哑元表,用来凑语法的;
trunc
trunc(sysdate,'day') //返回当前星期的星期天,无时分秒
取年月日
select extract(year from sysdate), extract(month from sysdate), extract(day from sysdate)
from dual;
1.1.4 数值、日期、字符的转换
to_char
to_date
to_number
1.2 lesson05
1.2.1 转换函数
隐式转换:
字符到数值或日期
数值到字符;
日期到字符;
日期与数值之间是显示转换
显示转换:
to_char
to_date
to_number
1.2.2 TO_CHAR
https://www.cnblogs.com/aipan/p/7941917.html
to_char函数的功能是将数值型或者日期型转化为字符型;
日期转换为字符:可以得到世纪、年、月、日、周、季度、小时、分钟、秒,以及相应的大写、名称等;
数值转换为字符:可以指定格式,如小数位数、前导、分割符、货币符等
1.2.3 to_number
字符转换为数值。
可以做进制转换;
一个错误语句,分析原因
select to_char(1235678.4,'L9999.00') from dual;
1.2.4 to_date
https://www.cnblogs.com/fmxyw/archive/2008/08/26/1276850.html
Oracle的SQL采用了mi代替分钟。
1.2.5 nvl
NVL(expr1,expr2)
第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
注意:两个参数类型必须匹配;
1.2.6 NVL2(expr1,expr2, expr3)
如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。
1.2.7 NULLIF(exp1,expr2)
如果exp1和exp2相等则返回空(NULL),否则返回第一个值。
1.2.8 Coalesce(expr1, expr2, expr3….. exprn)
返回表达式中第一个非空表达式
所有表达式必须是相同类型,或