介绍
Oracle中自带有to_date函数,我们可以使用它将char、varchar2、nchar和nvarchar2数据类型的值转换成date数据类型的值。
to_date函数不能直接转换clob数据类型的字符串,但能够通过隐式数据转换作为参数传入。
语法
TO_DATE(char [, fmt [, 'nlsparam' ] ])
说明:
- char 字段名
- fmt 转换格式,如果省略,则会使用默认日期格式。默认日期格式由数据库的初始化参数NLS_TERRITORY隐式确定,也可以由参数NLS_DATE_FORMAT显示确定。
- nlsparam 要转换成date数据类型的字符串的语言。
日期格式模型
该列表仅对部分格式写了说明,对于尚未编写说明的,以后有机会再确定涵义。
元素 | 说明 | 备注 |
- / , . ; : "字符串内容" | 不进行任何转换,通常用于分割时间,让时间显示的更易于肉眼可见 | |
AD A.D. | 转换为公元前还是公元 | 经过测试支持字符串“公元””公元前“两种 |
AM A.M. | 转换为上午还是下午 | |
BC B.C. | 转换为公元前还是公元 | 经过测试支持字符串“公元””公元前“两种 |
CC SCC | 转换为世纪。如果4为数字的年份的最后两位数在01到99之间,则世纪显示年度的前两位;否则,则世纪显示当年的前两位数字。 | 例如:2002年,转换后会显示21;2000年,转换后会显示20 |
D | 转换为星期,显示:1~7 | 该转换取决于会话的NLS_TERRITORY |
DAY | 转换为星期,显示:星期一~星期日 | Name of the unique constraint definition for the referenced table |
DD | 转换为月份中的第几天,显示:1~31 | |
DDD | 转换为年份中的第几年,显示:1~366 | |
DL | 返回长日期,可能显示:xxxx年xx月xx日 星期x | 由NLS_DATE_FORMAT参数确定该值的格式 |
DS | 返回短日期,可能显示:xxxx-xx-xx | 由NLS_TERRITORY和NLS_LANGUAGE参数确定该值的显示格式 |
DY | 返回星期,显示:星期一~星期日 | |
E | 返回时代名称 | 国内不使用 |
EE | 返回时代的全名称 | 国内不使用 |
FF[1..9] | 返回秒后面的单位,如果不指定,则以datetime或date类型默认的精度显示。 | to_date无法使用此元素,因为它比date精度 |
FM | ||
FX | VARCHAR2(30) | |
HH HH12 | 返回一天中的小时(十二小时制),显示:1~12 | |
HH24 | 返回一天中的小时(二十四小时制),显示:0~23 | |
IW | 返回日历周(一年中的第几周),由ISO-8601标准定义。显示:1-52或1-53 | |
IYYY | 返回日历周的4位数年份,由ISO-8601标准定义,显示:xxxx | |
IYY IY I | 返回日历周的最后3,2,1位数字,由ISO-8601标准定义,显示:IYY-xxx IY-xx I-x | |
J | ||
MI | 返回分钟,显示:0~59 | |
MM | 返回月份,显示:01-12 | |
MON | 返回月的缩写名称,显示:1月~12月 | |
MONTH | 返回月的缩写名称,显示:1月~12月 | 跟MON一致 |
PM P.M. | 返回上午还是下午,显示:上午、下午 | |
Q | 返回季度,显示:1~4 | |
RM | 返回月份,以罗马数字显示,显示:Ⅰ~Ⅻ | |
RR | ||
RRRR | ||
SS | 返回秒数,显示:0-59 | |
SSSSS | ||
TS | 返回短时间格式的时间 | 此值取决于NLS_TERRITORY和NLS_LANGUAGE参数 |
TZD | 返回夏令日期 | |
TZH | ||
TZM | ||
TZR | ||
WW | 返回一年中的第几周,显示:1-53 | 第一周开始于一年中的第一天,并持续到今年的第七天 |
W | ||
X | ||
Y,YYY | ||
YEAR SYEAR | ||
YYYY SYYYY | 返回年份的四位数字、带空格的四位数字,显示:YYYY-四位数的年份,SYYYY-前面带空格的四位数年份 | |
YYY YY Y | 返回年份的后3位、2位、1位数字,显示:YYY-年份的后三位数字;YY-年份的后两位数字;Y-年份的最后一位数字 |
案例
假如我这边有这样一张表testa,它的数据如下:
其中,B字段是varchar2类型的字段。
如果我想要将其转换成date类型,那么我首先要分析存储的类型是否符合时间转换模型的标准。经过简单的一个对比,可以看出该值对应的模型是‘YYYY/MM/DD HH24:MI:SS’,那么我们的SQL可以这样写:
select to_date(b,'yyyy/mm/dd hh24:mi:ss') from testa;
如此,就能得到date类型的字段。
评论区