zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数

2023-09-11 14:15:38 时间

Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数
【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate


oracle数据类型转换

在这里插入图片描述
在这里插入图片描述
日期,其实,已经把它隐式转换了
我们给了日月年
hire_date实际上是日期date类型
我们给了字符串,实际上oracle会自动转

在这里插入图片描述

SQL> select employee_id from employees where employee_id='206';

EMPLOYEE_ID
-----------
        206

SQL> select employee_id from employees where employee_id=206;

EMPLOYEE_ID
-----------
        206

你看我们给了字符串,或者数字
它都会自动给你转化为number类型的

这就是隐式类型的转换很舒服——但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换
但是写代码千万不要用隐式转换

为什么待会讲!!!
在这里插入图片描述
这里要是表达式赋值转换,是只能单向的
不支持反过来
在这里插入图片描述
在这里插入图片描述
所以,千万不要用隐式转换!!!!!
所以,千万不要用隐式转换!!!!!
所以,千万不要用隐式转换!!!!!
所以,千万不要用隐式转换!!!!!

知道就行了

显示数据类型转换

在这里插入图片描述
在这里插入图片描述

数字和日期转字符

在这里插入图片描述
我猜有第二个参数,就是日期格式
没有第二个参数,那就是数字

在这里插入图片描述
在这里插入图片描述

month月全名
mon月简写
mm月数字

dy星期几的简写
day星期几
dd是一个月的哪天,号数

SQL> select to_char(sysdate,'yyyy') from dual;

TO_CHAR(SYSDATE,'YYYY')
-----------------------
2022

SQL> select to_char(sysdate,'year') from dual;

TO_CHAR(SYSDATE,'YEAR')
------------------------------------------
twenty twenty-two

SQL> select to_char(sysdate,'mm') from dual;

TO_CHAR(SYSDATE,'MM')
---------------------
10

SQL> select to_char(sysdate,'month') from dual;

TO_CHAR(SYSDATE,'MONTH')
------------------------
10SQL> select to_char(sysdate,'mon') from dual;

TO_CHAR(SYSDATE,'MON')
----------------------
10SQL> select to_char(sysdate,'dy') from dual;

TO_CHAR(SYSDATE,'DY')
---------------------
星期二

SQL> select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDATE,'DAY')
----------------------
星期二

SQL> select to_char(sysdate,'dd') from dual;

TO_CHAR(SYSDATE,'DD')
---------------------
25

这都号好说

在这里插入图片描述
等等,各种骚
在这里插入图片描述

SQL> select to_char(sysdate,'AM') from dual;

TO_CHAR(SYSDATE,'AM')
---------------------
下午

SQL> select to_char(sysdate,'HH') from dual;

TO_CHAR(SYSDATE,'HH')
---------------------
06

SQL> select to_char(sysdate,'HH12') from dual;

TO_CHAR(SYSDATE,'HH12')
-----------------------
06

SQL> select to_char(sysdate,'MI') from dual;

TO_CHAR(SYSDATE,'MI')
---------------------
49

SQL> select to_char(sysdate,'ss') from dual;

TO_CHAR(SYSDATE,'SS')
---------------------
23

在这里插入图片描述

SQL> select to_char(sysdate,'HH:MI::ss AM') from dual;

TO_CHAR(SYSDATE,'HH:MI::SSAM')
------------------------------
06:51::16 下午

你可以给常量串,做拼接

10月25日

SQL> select to_char(sysdate,'dd "of" mm') from dual;

TO_CHAR(SYSDATE,'DD"OF"MM')
---------------------------
25 of 10

还能拼数字前缀
dd天
spth
spell 出th

在这里插入图片描述

SQL> select to_char(sysdate,'ddspth') from dual;

TO_CHAR(SYSDATE,'DDSPTH')
-------------------------
twenty-fifth

SQL> select to_char(sysdate,'ddth') from dual;

TO_CHAR(SYSDATE,'DDTH')
-----------------------
25th

SQL> select to_char(sysdate,'ddsp') from dual;

TO_CHAR(SYSDATE,'DDSP')
-----------------------
twenty-five

25号的各种写法

SQL> select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;

TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"')
------------------------------------
20221025SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DD')
-----------------------------
2022-10-25

在这里插入图片描述
没有小时分钟秒,那就是默认12:00

SQL> select last_name, to_char(hire_date,'yyyy"年"mm"月"dd"日"hh:mi:ss am') from employees;

LAST_NAME                 TO_CHAR(HIRE_DATE,'YYYY"年"MM"月"DD"日"HH:MI:SSAM')
------------------------- ------------------------------------------------
King                      2003061712:00:00 上午
Kochhar                   2005092112:00:00 上午
De Haan                   2001011312:00:00 上午
Hunold                    2006010312:00:00 上午
Ernst                     2007052112:00:00 上午
Austin                    2005062512:00:00 上午
Pataballa                 2006020512:00:00 上午

反正你要转的各种格式,要熟悉,用法写好就行了
挺爽的

希望考试别考太复杂了

to_char()将数字转化为字符串

可能需要加千位符号,
这时候就需要将数字,放入字符

在这里插入图片描述
关键就是第二个模板参数
看样例
9是占位

SQL> select to_char(346.555,'999,999.99') from dual;

TO_CHAR(346.555,'999,999.99')
-----------------------------
     346.56

格式的长度,可以大于你真实数字的长度

但是模板不够长,就gg

SQL> select to_char(123456346.555,'999,999.99') from dual;

TO_CHAR(123456346.555,'999,999.99')
-----------------------------------
###########

所以格式不匹配就gg
最好模板格式的长度要大于等于实际数字的长度
懂?

SQL> select to_char(56346.555,'099,999.99') from dual;

TO_CHAR(56346.555,'099,999.99')
-------------------------------
 056,346.56

如果是0,就是强制转0

SQL> select to_char(56346.555,'$99,999.99') from dual;

TO_CHAR(56346.555,'$99,999.99')
-------------------------------
 $56,346.56

SQL> select to_char(56346.555,'L99,999.99') from dual;

TO_CHAR(56346.555,'L99,999.99')
-------------------------------56,346.56

加美元和人民币

FM是去掉前后空格

SQL> select to_char(46.555,'99,999.99') from dual;

TO_CHAR(46.555,'99,999.99')
---------------------------
     46.56

SQL> select to_char(46.555,'fm99,999.99') from dual;

TO_CHAR(46.555,'FM99,999.99')
-----------------------------
46.56

前面的控制gg了

在这里插入图片描述

SQL> select last_name,to_char(salary,'fm999,999,999.00') from employees where last_name='Whalen';

LAST_NAME                 TO_CHAR(SALARY,'FM999,999,999.00')
------------------------- ----------------------------------
Whalen                    4,400.00

加美元

SQL> select last_name,to_char(salary,'fm$999,999,999.00') from employees where last_name='Whalen';

LAST_NAME                 TO_CHAR(SALARY,'FM$999,999,999.00')
------------------------- -----------------------------------
Whalen                    $4,400.00

很容易的

字符转数字

在这里插入图片描述
格式和上面的数字转字符串一样
在这里插入图片描述
不过就是数字而已

SQL> select to_number('$456.84','$999.99') from dual;

TO_NUMBER('$456.84','$999.99')
------------------------------
                        456.84

后面的格式要转化的字符的格式
前面的格式就是$999.99的格式
长度也是要长的

当年你把456.84转字符的时候用的就是这个格式:$999.99
逆转也是一样的道理
这些比java和Python复杂,但是本质就一样

在这里插入图片描述

SQL> select to_number('$34346.84','$99999.99') from dual;

TO_NUMBER('$34346.84','$99999.99')
----------------------------------
                          34346.84

很简单的

字符转日期

在这里插入图片描述
日期转字符
字符转日期
格式一样

SQL> select to_date('2022','fmyyyy') from dual;

TO_DATE('2022','FMYYYY')
------------------------
2022/10/1

SQL> select to_date('2022-03-09','fmyyyy-mm-dd') from dual;

TO_DATE('2022-03-09','FMYYYY-MM-DD')
------------------------------------
2022/3/9

SQL> select to_date('2022-03-09 11:57','fmyyyy-mm-dd hh:mi') from dual;

TO_DATE('2022-03-0911:57','FMYYYY-MM-DDHH:MI')
----------------------------------------------
2022/3/9 11:57:00

字符串转日期,返回就是date类型

在这里插入图片描述

SQL> select to_date('2022-03-09 11:30','fmyyyy-mm-dd hh:mi') from dual;

TO_DATE('2022-03-0911:30','FMYYYY-MM-DDHH:MI')
----------------------------------------------
2022/3/9 11:30:00

灰常容易了

SQL> select to_date('2022年3月9日 11点30分','fmyyyy"年"mm"月"dd"日"hh"点"mi"分"') from dual;

TO_DATE('2022年3月9日11点30分','FMYYYY"年"MM"月"DD"日"HH"点"MI"分"')
----------------------------------------------------------
2022/3/9 11:30:00

汉字要用点
不能用时
挺烦的这
还是上面那种不用汉字的格式舒服


总结

提示:重要经验:

1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。