oracle 的常用日期格式字符 與trunc函數2009-09-30 17:47
oracle 的常用日期格式字符 與trunc函數
yyyy 年 mm 月 dd 日 hh24 小時 mi 分鍾 ss 秒 .sss 毫秒
w 表示某月的第幾周
ww 表示某年的第幾周
如果要截取某個時間的某部分時間,可以使用如下函數:
trunc( sysdate,'hh24') 得到按小時取整的時間,該時間的分、秒的值為0。其他的同
例子:統計2008年以來每周執行的語句數。
select count(*) ,to_char(trunc(start_time,'ww'),'yyyy-ww') stat_time from my_log where start_time>=to_date('2008-1','yyyy-mm') group by trunc(start_time,'ww') order by stat_time
oracle trunc()函數的用法!2007-04-30 14:22
------------------rudy
關於TRUNC函數的format,自己現在有點體會,format為day時,只精確到天,而不管幾年幾月只要是符合的day就可以了,要想確定一年中的某月的某一天就要用trunc(date,'dd').
通俗的說吧,format為年時,精確到-----年
為月時,精確到------年,月(不管哪年,只要是相同的月和哪天)
為日時,精確到------年,月,日(不管哪年的哪月,只關心是哪天)
-----------------郁悶.今天才真正明白了.
1.TRUNC(for dates)
TRUNC函數為指定元素而截去的日期值。
其具體的語法格式如下:
TRUNC(date[,fmt])
其中:
date 一個日期值
fmt 日期格式,該日期將由指定的元素格式所截去。忽略它則由最近的日期截去
下面是該函數的使用情況:
TRUNC(TO_DATE(’24-Nov-1999 08:00 pm’,’dd-mon-yyyy hh:mi am’))
=’24-Nov-1999 12:00:00 am’
TRUNC(TO_DATE(’24-Nov-1999 08:37 pm’,’dd-mon-yyyy hh:mi am’,’hh’)) =’24-Nov-1999 08:00:00 am’
round (date,'format')未指定format時,如果日期中的時間在中午之前,則將日期中的時間截斷為12 A.M.(午夜,一天的開始),否則進到第二天。
TRUNC(date,'format')未指定format時,將日期截為12 A.M.,不考慮是否在中午之前的條件。
2.TRUNC(for number)
TRUNC函數返回處理后的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數前或后的部分做相應舍入選擇處理,而統統截去。
其具體的語法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取處理的數值
decimals 指明需保留小數點后面的位數。可選項,忽略它則截去所有的小數部分
下面是該函數的使用情況:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二個參數可以為負數,表示為小數點左邊指定位數后面的部分截去,即均以0記。
(在網上找的關於oracle trunc()函數的用法)
(1)SYSDATE
該函數返回當前的日期和時間。返回的是Oracle服務器的當前日期和時間。
select sysdate from dual; insert into purchase values (‘Small Widget’,’SH’,sysdate, 10); insert into purchase values (‘Meduem Wodget’,’SH’,sysdate-15, 15);
查看最近30天的所有銷售記錄,使用如下命令:
select * from purchase where purchase_date between (sysdate-30) and sysdate;
(2)USER
查看用戶名。
(3)USERENV
查看用戶環境的各種資料。
select userenv(‘TERMINAL’) FROM dual;
(1)ROUND 四舍五入函數
ROUND(數值,保留位數)
select round(3.1415,3) from deul; select product_name,round(product_price,0) price from product;
(2)TRUNC 從數中截去小數部分
TRUNC(數值,截斷小數點n位后的數)
select trunc(3.145159,3) from dual; select trunc(123456.45,-1) from dual; select trunc(123456.45) from dual; select product_name,trunc(product_price) price from product;
(1)UPPER、LOWER和INITCAP
這三個函數更改提供給它們的文體的大小寫。
select upper(product_name) from product; select lower(product_name) from product; select initcap(product_name) from product;
函數INITCAP能夠整理雜亂的文本,如下:
select initcap(‘this TEXT hAd UNpredictABLE caSE’) from dual;
(2)LENGTH
求數據庫列中的數據所占的長度。
select product_name,length(product_name) name_length from product order by product_name;
(3)SUBSTR
取子串,格式為:
SUBSTR(源字符串,起始位置,子串長度);
create table item_test(item_id char(20),item_desc char(25)); insert into item_test values(‘LA-101’,’Can, Small’); insert into item_test values(‘LA-102’,’Bottle, Small’); insert into item_test values(‘LA-103’,’Bottle, Large’);
取編號:
select substr(item_id,4,3) item_num,item_desc from item_test;
(4)INSTR
確定子串在字符串中的位置,格式如下:
INSTR(源字符串,要查找的字符串,查找起始位置)
select instr(‘this is line one’,’line’,1) from dual;
其返回值為子串在源字符串中從起始位置開始第一次出現的位置。上面例子的返回值為9。
select item_desc , instr(item_desc,’,’,1) from item_test;
(5)LTRIM、RTRIM和TRIM
去除字符串左邊的空格、去除字符串右邊的空格、去除字符串左右兩邊的空格。
select ltrim(‘ abc def ‘) from dual;
(1)SYSDATE和TRUNC
這兩個函數前面已經出現過,即取Oracle服務器系統的日期和截掉小數部分的功能。觀察以下操作:
create table test_date (name varchar2(20), p_date date); insert into test_date values(‘name1’,sysdate); select * from test_date; select * from test_date where p_date=’25-10月-05‘; select * from test_date where trunc(p_date)= ’25-10月-05‘;
Oracle系統中用SYSDATE取得的不僅包含日期而且還包含的有時間信息,時間信息實際上就是表示儒略日數據中的小數部分。
(2)ADD_MONTHS
該函數返回一個具有與所提供日期相差月份的日期,函數中給出了未來或以前的月份數。語法如下:
ADD_MONTHS(起始日期,增減月數) select add_months(’26-10月-05‘,2) from dual; select add_months(’26-10月-05‘,-2)from dual;
(3)LAST_DAY
返回包含給定日期的那個月的最后一天。語法為:
LAST_DAY(日期)
select last_day(’21-2月-80‘) from dual;
(4)MONTHS_BETWEEN
返回兩個日期間的月份。語法為:
MONTHS_BETWEEN(較晚日期,較早日期)
select months_between(’12-10月-05‘,’12-9月-03‘) from dual;
(1)TO_CHAR
該函數將日期、時間和數值轉換為文本。它的主要價值是提供對日期、時間和數的顯示控制;該函數的用法非常靈活,使用較復雜,在此我們僅對經常使用的轉換舉例說明。
1)格式化日期和時間值
TO_CHAR(日期數據,格式編碼)
select to_char(sysdate,’YYYY-MM-DD HH24:MI:SS’) from dual; select to_char(sysdate,’HH24:MI:SS’) from dual; select to_char(sysdate,‘YYYY’)||‘年’|| to_char(sysdate,'MM')||'月'|| to_char(sysdate,'DD')||'日' 日期 from dual
2)格式化數值
select to_char(5764.12345,'99,999.9999') from dual; select to_char(5764.12345,‘09,999.9999') from dual;
(2)TO_DATE
將文本轉換為實際的Oracle日期/時間值。格式:
TO_DATE(文本,日期格式)
select to_date(‘2005-10-10 11’,’YYYY-MM-DD HH24’) from dual; insert into item_test values( ‘name-x’, to_date(‘2005-10-25’,’YYYY-MM-DD’) ) ;
NVL函數完成一個簡單但有用的功能。任何時候給它一個空值,它都返回一個你所選擇的值。格式如下:
NAL(輸入值,如果輸入值為空要返回的值)
select nvl(null,’new_value’) from dual; select name,nvl(p_date,sysdate) from test_date ;
注意:函數中‘輸入值’和‘如果輸入值為空要返回的值’的類型必須一致。
/opt/BOCO.DAL/NPM/common/mbin/invoker/GP-NPM_invoker.pl -o "862" -s "2010-01-18 13:00:00" -e "2010-01-18 14:00:00" -task_id "832793" -table_list "tpd_tkgp"
2G:
tpd_msc
tpd_msc_rb
tpd_radio_bts(164數據庫)
tpa_radio_sum_t3
tpd_hlr
tpd_hlr_rb
tpd_ggsn
tpd_sgsn
tpd_sgsn_rb
tpd_sdp
tpd_scp
tpd_smp
tpd_smsc_traf
tpd_smsc_rb
tpd_tkgp