在oracle中要用to_date轉換成日期.
靖宇ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
具體方法:
1.sysdate
2.to_date('20090720','yyyymmdd')
Oracle中如何獲取系統(tǒng)當前時間
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
ORACLE里獲取一個時間的年、季、月、周、日的函數(shù)
select to_char(sysdate, 'yyyy' ) from dual; --年
select to_char(sysdate, 'MM' ) from dual; --月
select to_char(sysdate, 'dd' ) from dual; --日
select to_char(sysdate, 'Q') from dual; --季
select to_char(sysdate, 'iw') from dual; --周--按日歷上的那種,每年有52或者53周
/*
hh 小時(12)
hh24 小時(24)
Mi 分
ss 秒
D 周中的星期幾
ddd 年中的第幾天
WW 年中的第幾個星期
W 該月中第幾個星期 --每年的1月1號至1月7號為第一周,以此類推,每年53周
*/
獲取系統(tǒng)日期: SYSDATE()
格式化日期:
TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)
或 TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual
select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual
而如果把上式寫作:
select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual
則會報錯,因為小時hh是12進制,14為非法輸入,不能匹配。
轉換的格式:
表示 year 的:
y 表示年的最后一位 、
yy 表示年的最后2位 、
yyy 表示年的最后3位 、
yyyy 用4位數(shù)表示年
表示month的:
mm 用2位數(shù)字表示月 、
mon 用簡寫形式, 比如11月或者nov 、
month 用全稱, 比如11月或者november
表示day的:
dd 表示當月第幾天 、
ddd 表示當年第幾天 、
dy 當周第幾天,簡寫, 比如星期五或者fri 、
day 當周第幾天,全稱, 比如星期五或者friday
表示hour的:
hh 2位數(shù)表示小時 12進制 、
hh24 2位數(shù)表示小時 24小時
表示minute的:
mi 2位數(shù)表示分鐘
表示second的:
ss 2位數(shù)表示秒 60進制
表示季度的:
q 一位數(shù) 表示季度 (1-4)
另外還有ww 用來表示當年第幾周 w用來表示當月第幾周。
當前時間減去7分鐘的時間
select sysdate,sysdate - interval '7' MINUTE from dual;
當前時間減去7小時的時間
select sysdate - interval '7' hour from dual;
當前時間減去7天的時間
select sysdate - interval '7' day from dual;
當前時間減去7月的時間
select sysdate,sysdate - interval '7' month from dual;
當前時間減去7年的時間
select sysdate,sysdate - interval '7' year from dual;
時間間隔乘以一個數(shù)字
select sysdate,sysdate - 8*interval '7' hour from dual;
select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss:pm:dy') from dual; 年 月 日 24制小時 分 秒 上/下午 星期中文;
--獲取11月天數(shù)--select to_char(last_day(to_date('2010-11-1','YYYY-MM-DD')),'DD') from dual;
--獲取12月天數(shù)--select to_char(last_day(to_date('2010-12-1','YYYY-MM-DD')),'DD') from dual;
顯示上個禮拜一到禮拜日 SELECT to_char(SYSDATE,'yyyymmdd')-to_number(to_char(SYSDATE,'d')-1) - 6, to_char(SYSDATE,'yyyymmdd')-to_number(to_char(SYSDATE,'d')-1) from dual
在Oracle中,
!=
~=
^=
都是不等于號的意思。都可以使用。
但是奇怪是的, 我想拿出price不是180000的商品時:(price是Number類型的)
SELECT id, name FROM product where price 180000;
執(zhí)行這個語句時,priceis null 的記錄不出來。也就是拿不到price是null的商品。必須使用:
SELECT id, name FROM product where price 180000 or price is null;才行。
字符串的字段存在同樣的問題。
記住:null只能通過is null或者is not null來判斷,其它操作符與null操作都是false。
測試:select * from test where name'xn'。只能查出name非空的記錄。去掉name'xn'就可以了。這種寫法有問題。
然后用了instr(name,'xn')=0 來判斷,如果name非空的話,判斷還是有效的。如果name為空,這個判斷又出問題了。不得已只得采取instr(concat(name,'xx'),'xn') = 0來判斷,因為就算name為空,當和'xx'連接后,也會不為空的。
所以最后的sql語句為:
select * from test where instr(concat(name,'xx'),'xn') = 0 來查詢name字段不等于'xn'的記錄。
或者可以用 select * from test where nvl(name,'xx')'xn' 來查詢name字段不等于'xn'的記錄。
用to_char就可以把十進制轉成十六進制:
select to_char(31, '0x') from dual;
結果:1f
1.將十進制的數(shù)轉換為十六進制的數(shù)請使用to_char函數(shù)。
數(shù)據(jù)庫中16進制的表達是按照字符串來描述的,所以將十進制的數(shù)轉換為十六進制的數(shù)使用to_char函數(shù)
BYS@bys1select to_char(10,'xxx'), to_char(42,'xxx') from dual;
TO_C TO_C
---- ----
a 2a
2.將十六進制的數(shù)轉換為十進制的數(shù)請使用to_number函數(shù)。
如下,16進制A是10.2A是2*16+A=42.注意xxx,如果轉換的數(shù)比較大,要多寫幾個,避免位數(shù)不足而報錯。
BYS@bys1select to_number('a','xxx'), to_number('2a','xxx') from dual;
TO_NUMBER('A','XXX') TO_NUMBER('2A','XXX')
-------------------- ---------------------
10 42
####################################################
ORACLE未提供二進制與十進制互轉的函數(shù),可以自己創(chuàng)建。以下十進制與二進制轉換腳本引自惜紛飛博客,感謝!
3.十進制轉換二進制--使用自定義函數(shù)
CREATE OR REPLACE FUNCTION NUMBER_TO_BIT(V_NUM NUMBER)
RETURN VARCHAR IS V_RTN VARCHAR(8);--注意返回列長度
V_N1 NUMBER;
V_N2 NUMBER;
BEGIN
V_N1 := V_NUM;
LOOP
V_N2 := MOD(V_N1, 2);
V_N1 := ABS(TRUNC(V_N1 / 2));
V_RTN := TO_CHAR(V_N2) || V_RTN;
EXIT WHEN V_N1 = 0;
END LOOP;
--返回二進制長度
SELECT lpad(V_RTN,8,0)
INTO V_RTN
FROM dual;
return V_RTN;
end;
BYS@bys1col a255 for a20
BYS@bys1col a1 for a20
BYS@bys1select number_to_bit(255) as a255,number_to_bit(1) as a1 from dual;
A255 A1
-------------------- --------------------
11111111 00000001
4.二進制轉換十進制--使用自定義函數(shù)
CREATE OR REPLACE FUNCTION BIT_TO_NUMBER(P_BIN IN VARCHAR2) RETURN NUMBER AS
V_SQL VARCHAR2(30000) := 'SELECT BIN_TO_NUM(';
V_RETURN NUMBER;
BEGIN
IF LENGTH(P_BIN) = 256 THEN
RAISE_APPLICATION_ERROR(-20001, 'INPUT BIN TOO LONG!');
END IF;
IF LTRIM(P_BIN, '01') IS NOT NULL THEN
RAISE_APPLICATION_ERROR(-20002, 'INPUT STR IS NOT VALID BIN VALUE!');
END IF;
FOR I IN 1 .. LENGTH(P_BIN) LOOP
V_SQL := V_SQL || SUBSTR(P_BIN, I, 1) || ',';
END LOOP;
V_SQL := RTRIM(V_SQL, ',') || ') FROM DUAL';
EXECUTE IMMEDIATE V_SQL
INTO V_RETURN;
RETURN V_RETURN;
END;
BYS@bys1select bit_to_number('11111111') from dual;
BIT_TO_NUMBER('11111111')
-------------------------
255