to_date to_timestamp to_char cast的一些总结
来源:互联网 发布:mac 命令行打开文件夹 编辑:程序博客网 时间:2024/05/22 15:48
FF [1..9]
Yes
Fractional seconds; no radix character is printed. Use the X format element to add the radix character. Use the numbers 1 to 9 after FF to specify the number of digits in the fractional second portion of the datetime value returned. If you do not specify a digit, then Oracle Database uses the precision specified for the datetime data type or the data type's default precision. Valid in timestamp and interval formats, but not inDATE
formats.
Examples: 'HH:MI:SS.FF'
SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from DUAL;
DATE
Valid date range from January 1, 4712 BC, to December 31, 9999 AD. The default format is determined explicitly by theNLS_DATE_FORMAT
parameter or implicitly by theNLS_TERRITORY
parameter. The size is fixed at 7 bytes. This data type contains the datetime fieldsYEAR
,MONTH
, DAY
,HOUR
,MINUTE
, andSECOND
. It does not have fractional seconds or a time zone.
to:date函数:TO_DATE converts char
ofCHAR
,VARCHAR2
,NCHAR
, orNVARCHAR2
data type to a value ofDATE
data type
注意:to_date的varchar2等参数,要是date格式的,不能有fractional seconds(如FF.6等) or a time zone
比如:下面都是错误的
select to_date('03-APR-13 01.15.31.673000 PM','DD-MON-RR HH.MI.SS.FF AM') from dual;select to_date('03-APR-13 01.15.31 PM','DD-MON-RR HH.MI.SS.FF AM') from dual;select to_date('03-APR-13 01.15.31.673000 PM','DD-MON-RR HH.MI.SS AM') from dual;
而下面的是正确的
select to_date('03-APR-13 01.15.31 PM','DD-MON-RR HH.MI.SS AM') from dual;
也就是说to_date函数,不管是expr还是fmt都不能出现.FF这样的参数
to:timestamp:TO_TIMESTAMP
convertschar
ofCHAR
,VARCHAR2
,NCHAR
, orNVARCHAR2
data type to a value ofTIMESTAMP
data type.
可写为
select to_timestamp('03-APR-13 01.15.31.543 PM','DD-MON-RR HH.MI.SS.FF AM') from dual;select to_timestamp('03-APR-13 01.15.31 PM','DD-MON-RR HH.MI.SS.FF AM') from dual;
我想应该是'03-APR-13 01.15.31 PM'虽然没有.FF,但是可以作为timestamp看待,所以可以放入to_timestamp
而'03-APR-13 01.15.31.543不能作为to_date参数,因为'03-APR-13 01.15.31.543不可能当做date类型,他有FF,而date类型是没有fractional seconds的。所以放入to_date里会出现错误
那如何用.ff[1-9]指定特有的精度呢?
我想说一下TO_TIMESTAMP并不能指定精度,他的作用只是将字符装成timestamp类型,你在to_timestamp里面写.FF就可以了,加精度没有意义,我用to_char来实现指定精度
to_char函数:TO_CHAR (datetime) converts a datetime or interval value of DATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
,INTERVAL
DAY
TO
SECOND
, orINTERVAL
YEAR
TO
MONTH
data type to a value ofVARCHAR2
data type in the format specified by the date formatfmt
.
注意是将时间参数转成字符
比如:
select to_char(systimestamp,'DD/MON/RR HH:MI:SS:FF2 AM') from dual;
而
select to_char(sysdate,'DD/MON/RR HH:MI:SS.FF7 AM') from dual;
则错误。
那如何把字符串转成指定精度的timestamp呢?需要先将字符串转成timestamp类型,然后再将timestamp转成确定精度fmt .FF的varchar2
如下:
SELECT TO_CHAR( TO_TIMESTAMP('03-APR-13 01.15.31.6754542 PM', 'DD-MON-RR HH.MI.SS.FF AM'), 'DD-MON-RR HH.MI.SS.FF4 AM')FROM DUAL;
如何将timestamp转场date类型呢?我用cast函数
CAST
converts one built-in data type or collection-typed value into another built-in data type or collection-typed value.
那么什么能转换什么呢?
Table 5-1 Casting Built-In Data Types
to BINARY_FLOAT, BINARY_DOUBLE
X
X
X
--
--
--
X
to CHAR, VARCHAR2
X
X
X
X
X
X
--
to NUMBER
X
X
X
--
--
--
X
to DATE, TIMESTAMP, INTERVAL
--
X
--
X
--
--
--
to RAW
--
X
--
--
X
--
--
to ROWID, UROWID
--
X
--
--
--
X
--
to NCHAR, NVARCHAR2
X
--
X
X
X
X
X
Note 1: Datetime/interval includes DATE
,TIMESTAMP
,TIMESTAMP
WITH
TIMEZONE
,INTERVAL
DAY
TO
SECOND
, and INTERVAL
YEAR
TO
MONTH
.
Note 2: You cannot cast a UROWID
to a ROWID
if the UROWID
contains the value of a ROWID
of an index-organized table.
注意X是能转的: 比如from DATETIME / INTERVAL (Note 1)能转到to DATE, TIMESTAMP, INTERVAL
--
不能转: 比如from ROWID, UROWID (Note 2)不能转到to DATE, TIMESTAMP, INTERVAL
于是我用
select cast(systimestamp as date) from dual;
来完成timestamp to date的转换
最后实现一个复杂些的,如何把一个字符转成date类型呢?
刚看到
from CHAR, VARCHAR2 to DATE, TIMESTAMP, INTERVAL 是X
于是我写了
SELECT cast( '03-APR-13 01.15.31.6754542 PM' as date ) FROM DUAL;
但是出现错误:date format picture ends before converting entire input string
之后改成
SELECT cast( '03-APR-13 01.15.31.6754542 PM' as timestamp ) FROM DUAL;
则可以,也就是说就算from CHAR, VARCHAR2 to DATE, TIMESTAMP, INTERVAL 是X,也只能是根据varchar2的具体情况,选定合适的日期类型,而不像cast timestamp as date,由于'03-APR-13 01.15.31.6754542 PM'不是date类型,所以会出现错误。
我又写了
SELECT cast (cast( '03-APR-13 01.15.31.6754542 PM' as timestamp ) as date) FROM DUAL;
来完成转换
- to_date to_timestamp to_char cast的一些总结
- to_char和to_date的一些法总结
- to_timestamp、to_timestamp、to_date 函数
- TO_CHAR 和 TO_DATE的一些用法
- 日付データ/文字列データの変換(TO_DATE、TO_CHAR、TO_TIMESTAMP)
- TO_CHAR和TO_DATE的用法
- to_date与to_char的区别
- oracle to_date to_char的使用
- Oracle的TO_CHAR和TO_DATE
- to_char()和to_date()的用法
- to_char to_date
- Oracle的日期时间 to_date和to_char
- oracle数据库的 to_char 和to_date 区别
- oracle 的to_char、to_number、to_date用法
- oracle 的to_char、to_number、to_date用法
- oracle 的to_char、to_number、to_date用法
- to_date to_char 的用法及区别
- oracle 的to_char、to_number、to_date用法
- JavaCC使用小结
- [正能量系列]失业的程序员(一)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- php基础学习
- 黑马程序员-交通灯管理系统
- to_date to_timestamp to_char cast的一些总结
- poj 1745
- 输出格式
- NEFU 642 monkey(DP+优化)
- js 分页
- MyBatis学习(五)- ResultMap
- 安装完Fedora 18后需要做的事情
- GSM短信编码方式
- 设计模式入门——胡老师的监听器模式