数据库
首页 > 数据库> > SQL平常使用(3)

SQL平常使用(3)

作者:互联网

SQL平常使用(3)

单值函数在数字的应用

round 四舍五入
select round(45.67) from dual; 46
select round(45.67,1) from dual; 45.7, 小数点后保留一位
select round(45.67,-1) from dual; 50 看个位数,四舍五入个位
trunc 只舍不去,截断
select trunc(45.67) from dual; 45
select trunc(45.67,1) from dual; 45.6
select trunc(45.67,2) from dual; 45.67
select trunc(45.67,-1) from dual; 40
select trunc(45.67,-2) from dual; 0
select trunc(55.67,-2) from dual; 0
Mod取余

哑表dual

dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。
例如:
显示1+1的结果,可以看出,dual很多时候是为了构成select的标准语法
select 1+1 from dual;

字符函数

LOWER Converts to lowercase
UPPER Converts to uppercase
INITCAP Converts to initial capitalization
CONCAT Concatenates values
SUBSTR Returns substring
LENGTH Returns number of characters
NVL Converts a null value

lower 把字符转为小写

例如:把’HELLO’转换为小写
select lower(‘HELLO’)
from dual;

例如:把s_emp表中的last_name列的值转换为小写
select lower(last_name)
from s_emp;

upper 把字符转换为大写
例如:把’world’转换为大写
select upper(‘world’)
from dual;

例如:把s_emp表中的last_name列的值转换为大写
select upper(last_name)
from s_emp;

例如:查询s_emp表中名字为Ngao的人信息
这样是查不到:
select last_name,salary,dept_id
from s_emp
where last_name=‘NGAO’;
这样就可以查询到了:
select last_name,salary,dept_id
from s_emp
where upper(last_name)=‘NGAO’;

initcap 把字符串首字母转换为大写

例如:把’hELLO’转换为首字母大写,其余字母小写
select initcap(‘hELLO’)
from dual;

concat 把俩个字符串连接在一起(类似之前的||的作用)

例如:把’hello’和’world’俩个字符串连接到一起,并且起个别名为msg
select concat(‘hello’,‘world’) msg
from dual;

例如:把first_name和last_name俩个列的值连接到一起
select concat(first_name,last_name) as name
from s_emp;

substr 截取字符串

例如:截取’hello’字符串,从第2个字符开始(包含第二个字符),截取后面连续的3个字符
select substr(‘hello’,2,3)
from dual;

length 获得字符串长度
例如:获得’world’字符串的长度
select length(‘world’)
from dual;

例如:获得s_emp表中last_name列的每个值的字符长度
select length(last_name)
from s_emp;

nvl 替换列中为null的值
在前面的章节已经使用过了
select last_name,nvl(commission_pct,0)
from s_emp;
3.单值函数在日期的应用
dd-mod-yy
日期函数
MONTHS_BETWEEN Number of months between two dates
ADD_MONTHS Add calendar months to date
NEXT_DAY Next day of the date specified
LAST_DAY Last day of the month
ROUND Round to date at midnight
TRUNC Remove time portion from date

sysdate关键字
表示系统的当前时间
例如:
显示时间:当前时间
select sysdate from dual;

注意:sysdate进行加减操作的时候,单位是天
例如:
显示时间:明天的这个时候
select sysdate+1 from dual;

例如:
显示时间:昨天的这个时候
select sysdate-1 from dual;

例如:
显示时间:1小时之后的这个日期
select sysdate+1/24 from dual;

months_between 俩个日期之间相差多少个月(单位是月)
例如:
30天之后和现在相差多少个月
select months_between(sysdate+30,sysdate)
from dual;

add_months 返回一个日期数据:表示一个时间点,往后推x月的日期
例如:
'01-2月-2016’往后推2个月
select add_months(‘01-2月-2016’,2)
from dual;

例如:
当前时间往后推4个月
select add_months(sysdate,4)
from dual;

注意:这个数字也可以是负数,表示往前推x月

next_day 返回一个日期数据:表示一个时间点后的下一个星期几在哪一天
例如:
离当前时间最近的下一个星期5是哪一个天
select next_day(sysdate,‘星期五’)
from dual;
注意:
如果要使用’FRIDAY’,那么需要把当前会话的语言环境修改为英文

last_day 返回一个日期数据:表示一个日期所在月份的最后一天
例如:
当前日期所在月份的最后一天(月底)
select last_day(sysdate)
from dual;

round 对日期进四舍五入,返回操作后的日期数据
例如:
把当前日期四舍五入到月
select round(sysdate,‘MONTH’)
from dual;
测试:15号16号分别是舍弃还是进位

把当前日期四舍五入到年
select round(sysdate,‘YEAR’)
from dual;

	//这个写法是错误的
	//数字函数也有一个round
	//俩个ronnd函数有冲突
	//所以这里不能使用默认的日期格式
	select round('01-2月-2016','MONTH')
	from dual;

trunc 对日期进行截取 和round类似,但是只舍弃不进位

to_char 把日期转换为字符

    例如:
	把当前日期按照指定格式转换为字符串
	select to_char(sysdate,'yyyy')
	from dual;
	
	  日期格式:
	  yyyy:四位数的年份
	  rrrr:四位数的年份
	  yy:两位数的年份
	  rr:两位数的年份
	  mm:两位数的月份(数字)
	  D:一周的星期几
	  DD:一月的第几天
	  DDD :一年的第几天
	  YEAR:英文的年份
	  MONTH:英文全称的月份
	  mon:英文简写的月份
	  ddsp:英文的第几天(一个月的)
	  ddspth:英文序列数的第几天(一个月的)
	  DAY:全英文的星期
	  DY:简写的英文星期
	  hh:小时
	  mi:分钟
	  ss:秒

	例如:
	测试常见的一些日期数据转换为字符串的格式
	select to_char(sysdate,'yyyy MM D DD DDD YEAR MONTH ddsp ddspth DAY DY') from dual;

	select to_char(sysdate,'dd-mm-yy')
	from dual;

	select to_char(sysdate,'yy-mm-dd')
	from dual;

	select to_char(sysdate,'dd-mm-yy HH24:MI:SS AM')
	from dual;

to_char 把数字转换为字符
例如:
select to_char(salary,’$999,999.00’)
from s_emp;

	fm表示去除结果显示中的开始的空格
	select to_char(salary,'fm$999,999.00') 
	from s_emp;

	L表示系统本地的货币符号
	select to_char(salary,'fmL999,999.00') 
	from s_emp;
	


  to_number 把字符转换为数字
	例如:
	select to_number('1000') 
	from dual;
	
	//这个写法是错的 abc不能转换为数字
	select to_number('abc')
	from dual;

	

  to_date 把字符转换为日期
	例如:
	select to_date('10-12-2016','dd-mm-yyyy')
	from dual;

	select to_date('25-5月-95','dd-month-yy')
	from dual;

	select to_date('95/5月/25','yy/month/dd')
	from dual;

	//session语言环境设置为英文下面可以运行
	select to_date('25-MAY-95','dd-MONTH-yy')
	from dual;

to_number(字符串)
转换成数字,字符串也需要是数字
to_date
把字符串转换成日期格式;
to_date(字符串,’fmt’)

左外连接
select
from表1 left join 表2 on 连接条件
就可以查出右边表为空的情况
右外链接
select
from表1 right join 表2 on 连接条件

标准sql语句,标准的sql语法规范
Oracle数据库中的左右连接(简单的)
把(+)放到数据少的一方
d.id =c.id(+);
全连接
标准sql语句
表一 full join 表二 on连接条件
Oracle中没有全连接简写的情况

集合连接
Union
Minus
intersect 求俩个结果集的交集
伪列
rownum
是oracle数据库中的一种字段
不是真正的字段
伪列:取一条加一个备注
查询员工表中前10条数据
Select*
From s_emp
Where rownum<=10;

作用:分页功能

标签:sysdate,平常,last,name,SQL,emp,dual,使用,select
来源: https://blog.csdn.net/qq_42150316/article/details/88778993