oracle除数函数,Oracle常⽤函数(2)
三、⽇期函数
varchar2最大长度TO_CHAR (character)
语法
to_char_char::=TO_CHAR( nchar | clob | nclob )
功能
将以下类型的数据转换成数据库字符集中的类型:NCHAR, NVARCHAR2, CLOB,或NCLOB。
举例
这是⼀个简单的⼩例⼦,可以把它和TO_CHAR (number)中的第⼀个例⼦⽐较:
SELECT TO_CHAR('01110') FROM DUAL;
TO_CH
-
----
01110
下⾯这个例⼦中,将表pm.print_media中的⼀些CLOB数据转换数据库字符集的类型:
SELECT TO_CHAR(ad_sourcetext) FROM print_media
WHERE product_id = 2268;
TO_CHAR(AD_SOURCETEXT)
--------------------------------------------------------------------
******************************
Standard Hayes Compatible Modem
Product ID: 2268
The #1 selling modem in the universe! Tiger2's modem includes call
management and Internet voicing. Make real-time full duplex phone
calls at the same time you're online.
**********************************
TO_CHAR (number)
语法
to_char_number::=TO_CHAR( n [, fmt [, 'nlsparam']] )
功能
将NUMBER类型的n按照指定的fmt格式转换成VARCHAR2类型。如果省略fmt, 则n被按照原来的长度转换成VARCHAR2,以保持其精度不变。
参数'nlsparam'指定了返回值的格式:
⼩数点(Decimal character)
分隔符(Group separator)
本国货币字符(Local currency symbol)
国际货币字符International currency symbol
该参数格式如下:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
字符d代表⼩数点,字符g代表分隔符,它们必须是不同的单字节字符。记得在单引号内,两个单引号代表⼀个单引号字符。货币字符长度为10个字符(不⾜10个字符,则左填充空格)。
如果省略参数 'nlsparam'或它内部的任何参数,该函数将使⽤会话中的默认参数值。
举例
下⾯的例⼦中,使⽤隐式转换将⼀个字符串转换成数字(可以将它与TO_CHAR (character)中的第⼀个例⼦进⾏⽐较):
SELECT TO_CHAR('01110' + 1) FROM dual;
TO_C
----
1111
下⾯的例⼦中,你将看到在货币符号的左边填充了空格,以达到10个字符长度:
SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount"
FROM DUAL;
Amount
--------------
$10,000.00-
SELECT TO_CHAR(-10000,'L99G999D99MI',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''AusDollars'' ') "Amount"
FROM DUAL;
Amount
-------------------
AusDollars10.000,00-
TO_CHAR (datetime)
语法
to_char_date::=TO_CHAR( date [, fmt [, 'nlsparam' ]] )
功能
TO_CHAR (datetime)将以下⽇期类型的数据按照指定的fmt格式转换成VARCHAR2类型:DATE, TIME
STAMP, TIMESTAMP WITH TIME ZONE,或TIMESTAMP WITH LOCAL TIME ZONE。如果省略格式fmt,将按照以下格式进⾏转换:
DATE按照默认的⽇期格式转换成VARCHAR2类型。
TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE按照默认的时间戳格式进⾏转换。
TIMESTAMP WITH TIME ZONE按照默认的带时区时间戳格式进⾏转换。
参数 'nlsparams'指定了返回值显⽰的语⾔(年⽉的名字和缩写)。该参数的格式为:
'NLS_DATE_LANGUAGE = language'
如果省略 'nlsparams',该函数将按照默认的⽇期语⾔返回结果。
举例
下⾯的例⼦中,将使⽤这个表:
CREATE TABLE date_tab (
ts_colTIMESTAMP,
tsltz_colTIMESTAMP WITH LOCAL TIME ZONE,
tstz_colTIMESTAMP WITH TIME ZONE);
下⾯的这些例⼦中,将使⽤TO_CHAR函数转换不同的时间戳类型。其中TIMESTAMP WITH LOCAL TIME ZONE的结果与会话设定的时区相关。⽽TIMESTAMP和TIMESTAMP WITH TIME ZONE的结果与会话设定的时区⽆关:
ALTER SESSION SET TIME_ZONE = '-8:00';
INSERT INTO date_tab VALUES (
TIMESTAMP'1999-12-01 10:00:00',
TIMESTAMP'1999-12-01 10:00:00',
TIMESTAMP'1999-12-01 10:00:00');
INSERT INTO date_tab VALUES (
TIMESTAMP'1999-12-02 10:00:00 -8:00',
TIMESTAMP'1999-12-02 10:00:00 -8:00',
TIMESTAMP'1999-12-02 10:00:00 -8:00');
SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF'),
TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM')
FROM date_tab;
TO_CHAR(TS_COL,'DD-MON-YYYYHH2 TO_CHAR(TSTZ_COL,'DD-MON-YYYYHH24:MI:
------------------------------ -------------------------------------
01-DEC-1999 10:00:0001-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:0002-DEC-1999 10:00:00.000000 -08:00
SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF')
FROM date_tab;
SESSIONTIMEZONETO_CHAR(TSLTZ_COL,'DD-MON-YYYY
---------------------------------------------
-08:0001-DEC-1999 10:00:00.000000
-08:0002-DEC-1999 10:00:00.000000
ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF'),
TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM')
FROM date_tab;
TO_CHAR(TS_COL,'DD-MON-YYYYHH2 TO_CHAR(TSTZ_COL,'DD-MON-YYYYHH24:MI:
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.00000001-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.00000002-DEC-1999 10:00:00.000000 -08:00
SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF')
FROM date_tab;
SESSIONTIMEZONETO_CHAR(TSLTZ_COL,'DD-MON-YYYY
------------------------- ------------------------------
-05:0001-DEC-1999 13:00:00.000000
-05:0002-DEC-1999 13:00:00.000000
MONTHS_BETWEEN
语法months_between::=MONTHS_BETWEEN( date1 , date2 )
功能
返回⽇期date1和date2之间的⽉数。如果date1⼤于date2,则返回正数;否则返回负数。如果date1和date2的⽉份具有相同的天数,或都是对应⽉份的最后⼀天,则返回值永远是正数。否则Oracle会按照⼀个⽉有31天,来计算⽇期date1和date2之间的差值,计算时还会考虑到⼆者的时差。
举例
下⾯的例⼦中,将返回两个⽇期之间的差值:
SQL> select months_between(
2to_date('20070430', 'yyyymmdd'),
3to_date('20070227', 'yyyymmdd')
4) months_between
5 from dual;
MONTHS_BETWEEN
--------------
2.09677419
后⾯的⼩数是怎么计算的呢?我们在功能⾥讲了,Oracle是按照每⽉31天来计算的。那么,就认为2007年2⽉有31天咯。那么这两个⽇期相差3天:
SQL> select 3/31 from dual;
3/31
----------
.096774194
SQL>
下⾯的这个例⼦中,你将看到若两个⽇期的“⽇”相同,或者都是对应⽉份的最后⼀天,则返回值永远是整数:SQL> select months_between(
2to_date('20070430', 'yyyymmdd'),
3to_date('20070330', 'yyyymmdd')
4) months_between
5from dual
6;
MONTHS_BETWEEN
--------------
1
SQL> ed
已写⼊⽂件afiedt.buf
1select months_between(
2to_date('20070430', 'yyyymmdd'),
3to_date('20070331', 'yyyymmdd')
4) months_between
5* from dual
6/
MONTHS_BETWEEN
--------------
1
SQL>
LAST_DAY
语法last_day::= LAST_DAY( date )
功能
返回输⼊⽇期中,该⽉份的最后⼀天的⽇期。
举例
下⾯的语句确定当前⽉份还剩下多少天:
SELECT SYSDATE,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论