PIXNET Logo登入

狐的窩

跳到主文

享受生活

部落格全站分類:圖文創作

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 11月 11 週一 201311:51
  • Oracle如何檢核空字串(How to compare a VARCHAR2 variable, which is an empty value?)

上星期遇到的情況,當測試資料也建好了,就很直覺下了一個SQL語法去檢核該條件欄位是不是空的?
SQL> SELECT * FROM TXN FROM USERDATE != ''
結果卻找不到任何資料!當下覺得怎麼會這樣,明明資料才建好,不加條件就找得到資料。只好看文件找解答,最後的結果是
Oracle doesn't differentiate between empty strings and NULL, Use the IS NULL syntax to check if variable is an empty string.
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(437)

  • 個人分類:Oracle
▲top
  • 1月 09 週三 201315:05
  • Oracle 計算時間差

突然來了個要計算每筆交易的時間,試著用Oracle提供的函式來解決,將最後的結果做個記錄。
計算兩日期的時間差:START_DATE, END_DATE
天:ROUND(TO_NUMBER(END_DATE - START_DATE))
小時:ROUND(TO_NUMBER(END_DATE - START_DATE) *24)
分:ROUND(TO_NUMBER(END_DATE - START_DATE) *24*60)
秒:ROUND(TO_NUMBER(END_DATE - START_DATE) *24*60*60)
毫秒:ROUND(TO_NUMBER(END_DATE - START_DATE) *24*60*60*1000)
上述的START_DATE, END_DATE為日期形態,如果遇到日期都用字串形態存入資料庫時,需在用TO_DATE轉換
TO_DATE(START_DATE, 'YYYYMMDDHH24MISS')
YYYYMMDDHH24MISS 這格式需帶入符合您的日期格式
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(5,881)

  • 個人分類:Oracle
▲top
  • 8月 16 週二 201114:12
  • Oracle去除空白(Trim Space)

往往在操作PL/SQL時會遇到所謂的靈異現象,明明兩字串肉眼看都一模一樣,可是程式就是不往設定的流程跑,會發生此問題,主要是PL/SQL和Oracle在對資料型態不同的字串處理方式不一樣。
PL/SQL以varchar2類型接收Oracle的char類型,將會自動去除後端的空白;以char類型接收varchar2類型,會補滿空白。
Oracle的varchar2接收char時,不會去除空白;Oracle的char接收varchar2會補滿空白。
因此當兩字串比較時,就會因空白的差異而得到非預期的結果。此時建議用
RTRIM
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(3,076)

  • 個人分類:Oracle
▲top
  • 8月 15 週一 201114:03
  • Oracle日期運算問題

不管是資料庫操作或是Shell script撰寫,日期的運算加減是常會遇到的一個問題,Oracle提供了一些常用的運算函數來操作這些日期的運算問題。


1. SYSDATE + or - 天數

EX:
SQL> SELECT SYSDATE FROM dual;
SYSDATE
----------
2011/08/15
2. 日期加數值
EX:
SQL> SELECT SYSDATE+10 FROM dual;
SYSDATE+10
----------
2011/08/25
3. 日期減數值
EX:
SQL> SELECT SYSDATE-15 FROM dual;
SYSDATE-15
----------
2011/07/31
4. 日期相減
EX:
SQL> SELECT SYSDATE- TO_DATE('2011/08/14') FROM dual;
SYSDATE-TO_DATE('2011/08/14')
-----------------------------
1.51289352
SQL> SELECT TRUNC(SYSDATE- TO_DATE('2011/08/14')) FROM dual;
TRUNC(SYSDATE-TO_DATE('2011/08/14'))
------------------------------------
1
5. 日期相減獲得小時差距
EX:
SQL> SELECT TRUNC((SYSDATE - TO_DATE('2011/08/14'))*24) FROM dual;
TRUNC((SYSDATE-TO_DATE('2011/08/14'))*24)
-----------------------------------------
36
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE,'YY
-------------------
2011/08/15 12:21:52
6. 日期相減獲得分鐘差距
EX:
SQL> SELECT TRUNC((SYSDATE - TO_DATE('2011/08/14'))*24*60) FROM dual;
TRUNC((SYSDATE-TO_DATE('2011/08/14'))*24*60)
--------------------------------------------
2182
7. 日期相減獲得秒數差距
EX:
SQL> SELECT TRUNC((SYSDATE - TO_DATE('2011/08/14'))*24*60*60) FROM dual;
TRUNC((SYSDATE-TO_DATE('2011/08/14'))*24*60*60)
-----------------------------------------------
130993
8. 日期加 N 小時
EX:
SQL> SELECT TO_CHAR(SYSDATE+(1/24), 'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE+(1/
-------------------
2011/08/15 13:24:37
9. 日期加 N 分鐘
EX:
SQL> SELECT TO_CHAR(SYSDATE+(1/1440), 'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE+(1/
-------------------
2011/08/15 12:26:11
10. 日期加 N 秒數
EX:
SQL> SELECT TO_CHAR(SYSDATE+(1/86400), 'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE+(1/
-------------------
2011/08/15 12:25:33
11. ADD_MONTHS(d, n)
從時間點 d 加上 n 小時

EX:
SQL> SELECT SYSDATE, ADD_MONTHS(SYSDATE, 3) FROM dual;
SYSDATE ADD_MONTHS
---------- ----------
2011/08/15 2011/11/15
12. LAST_DAY(d)
從時間點 d 起,當月的最後一天

EX:
SQL> SELECT SYSDATE, LAST_DAY(SYSDATE) 月底 FROM dual;
SYSDATE 月底
---------- ----------
2011/08/15 2011/08/31
13. NEXT_DAY(d, char)
從時間點 d 開始,下星期幾的日期
char: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY

EX:
SQL> SELECT SYSDATE, NEXT_DAY(SYSDATE, 'MONDAY') "下星期一" FROM dual;
SYSDATE 下星期一
---------- ----------
2011/08/15 2011/08/22
SQL> SELECT SYSDATE, NEXT_DAY(SYSDATE, 'MONDAY')+1 FROM dual;
SYSDATE NEXT_DAY(S
---------- ----------
2011/08/15 2011/08/23
14. MONTHS_BETWEEN(d1, d2)
計算兩日期之間的相隔月數

EX:
SQL> SELECT TRUNC(MONTHS_BETWEEN('2011/08/31','2011/07/01')) FROM dual;
TRUNC(MONTHS_BETWEEN('2011/08/31','2011/07/01'))
------------------------------------------------
1
以15號為四捨五入
SQL> SELECT ROUND(MONTHS_BETWEEN('2011/08/31','2011/07/01')) FROM dual;
ROUND(MONTHS_BETWEEN('2011/08/31','2011/07/01'))
------------------------------------------------
2
15. NEW_TIME(d, z1, z2)
轉換新時區

EX:
SQL> SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') "遠東地區" ,
2 TO_CHAR(NEW_TIME(SYSDATE,'EST','GMT'),'YYYY/MM/DD HH24:MI:SS') "格林威治"
3 FROM dual;
遠東地區 格林威治
------------------- -------------------
2011/08/15 13:57:47 2011/08/15 18:57:47
16. ROUND(d[, fmt])
對日期作四捨五入的運算
月份以每月15號為基準
年份以六月為基準

EX:
SQL> SELECT SYSDATE,ROUND(SYSDATE,'MONTH') FROM dual;
SYSDATE ROUND(SYSD
---------- ----------
2011/08/15 2011/08/01
SQL> SELECT SYSDATE,ROUND(SYSDATE,'YEAR') FROM dual;
SYSDATE ROUND(SYSD
---------- ----------
2011/08/15 2012/01/01
17. TRUNC(d[, fmt])
對日期作無條件捨去的運算

EX:
SQL> SELECT SYSDATE, TRUNC(SYSDATE,'YEAR') FROM dual;
SYSDATE TRUNC(SYSD
---------- ----------
2011/08/15 2011/01/01
SQL> SELECT SYSDATE, TRUNC(SYSDATE,'MONTH') FROM dual;
SYSDATE TRUNC(SYSD
---------- ----------
2011/08/15 2011/08/01
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(17,328)

  • 個人分類:Oracle
▲top
  • 8月 15 週一 201111:38
  • Oracle與日期有關的常用函數

Oracle 用來取得目前系統時間的函數為sysdate。
EX:
SQL> SELECT sysdate FROM dual;
SYSDATE
---------
15-AUG-11
*更改目前session日期顯示格式
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
Session altered.
SQL> SELECT sysdate FROM dual;
SYSDATE
----------
2011-08-15
常用的日期格式:
1. YYYY/MM/DD
YYYY 年(4位)
MM 月份(2位)
DD 日期(2位)

SQL> SELECT TO_CHAR(sysdate, 'YYYY/MM/DD') FROM dual;
TO_CHAR(SY
----------
2011/08/15
2. 取得星期幾
Sunday=1, Monday=2, ...

SQL> SELECT TO_CHAR(sysdate, 'D') FROM dual;
T
-
2
SQL> SELECT TO_CHAR( TO_DATE('2011/08/14'), 'D') FROM dual;
T
-
1
3. DDD 一年的第幾天
SQL> SELECT TO_CHAR(sysdate, 'DDD') FROM dual;
TO_
---
227
4. WW 一年的第幾週
SQL> SELECT TO_CHAR(sysdate, 'WW') FROM dual;
TO
--
33
5. W 一月的第幾週
SQL> SELECT TO_CHAR(sysdate, 'W') FROM dual;
T
-
3
6. YYYY/MM/DD HH24:MI:SS AM
YYYY 年
MM 月份
DD 日期
HH24/HH HH24表採24小時制
MI 分鐘
SS 秒數
AM/PM 顯示上/下午

SQL> SELECT TO_CHAR(sysdate, 'YYYY/MM/DD HH24:MI:SS AM') FROM dual;
TO_CHAR(SYSDATE,'YYYY/
----------------------
2011/08/15 11:48:43 AM
SQL> SELECT TO_CHAR(sysdate, 'YYYY/MM/DD HH24:MI:SS PM') FROM dual;
TO_CHAR(SYSDATE,'YYYY/
----------------------
2011/08/15 11:49:03 AM
7. J 顯示Juilan Day, BC 4712/01/01為1
SQL> SELECT TO_CHAR(sysdate, 'J') FROM dual;
TO_CHAR
-------
2455789
SQL> SELECT TO_CHAR(TO_DATE('2011/08/14'),'J') FROM dual;
TO_CHAR
-------
2455788
8. RR/MM/DD
公元 2000 問題
00-49 表下世紀
50-99 表本世紀
SQL> SELECT to_DATE('99/12/31','RR/MM/DD') FROM dual;
TO_DATE('9
----------
1999-12-31
SQL> SELECT TO_DATE('02/02/02','RR/MM/DD') FROM dual;
TO_DATE('0
----------
2002-02-02
SQL> SELECT TO_DATE('49/12/31','RR/MM/DD') FROM dual;
TO_DATE('4
----------
2049-12-31
SQL> SELECT TO_DATE('50/01/01','RR/MM/DD') FROM dual;
TO_DATE('5
----------
1950-01-01
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(1) 人氣(70,431)

  • 個人分類:Oracle
▲top
  • 8月 12 週五 201115:52
  • Oracle內建常用字串函數

字串的開始位置是1
字串函數傳回字串值
CHR, CONCAT, INITCAP, LOWER, LPAD, LTRIM, REPLACE, RPAD, RTRIM, SUBSTR, TRANSLATE, UPPER
字串函數傳回數字值
ASCII, INSTR, LENGTH

(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(4,863)

  • 個人分類:Oracle
▲top
  • 8月 12 週五 201115:52
  • Oracle內建常用數字函數

Oracle內建常用數字函數:
CEIL, FLOOR, ROUND, TRUNC, ABS, MOD.

(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(224)

  • 個人分類:Oracle
▲top
  • 8月 12 週五 201115:51
  • SQL*PLUS環境指令

Oracle SQL*PLUS 環境指令常應用於shell script撰寫時,實在非常有用。
SET:設定目前SQL*PLUS使用環境
SHOW:察看目前SQL*PLUS使用環境
STORE:儲存目前SQL*PLUS使用環境
STORE SET finename.sql [Create|Replace|append]
SET ECHO OFF (可壓抑start, @執行時,顯示SQL指令)
SET FEEDBACK OFF (不return查詢筆數)
SET HEADING OFF (不顯示column Heading)
SET LINESIZE 1024 (設定紀錄長度最大顯示)
SET NEWPAGE 0 (不換頁)
SET PAGESIZE 0 (每頁長度)
SET SPACE 0 (設定欄位間顯示間格)
SET VERIFY OFF (不顯示置換SQL指令)
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(594)

  • 個人分類:Oracle
▲top
  • 8月 05 週五 201101:54
  • SQL*PLUS定義變數和顯示

SQL*PLUS操作應用
VARIABLE: Define sql*plus bind variable。
Note: 變數只能被用於PL/SQL Block中,且使用定義的變數,須加前置":"。
PRINT: Print out sql*plus bind variable
定義變數可用的資料類別:
NUMBBER
CHAR, CHAR(n): n = 1~255
VARCHAR2(n): n = 1~2000
REFCURSOR: Is a reference PL/SQL Cursor variable.
Sample:
$ sqlplus youruser/yourpass@yourdb;
SQL> var ss number
SQL> var aa varchar2(10)
SQL> var bb varchar2(10)
SQL> BEGIN (進入 anonymous PL/SQL Block)
2 :aa := 'Test';
3 :bb := '20110101';
4 :ss := pk_seq_pool.getSeqNo(:aa, :bb);
5 END ;
6 /
PL/SQL procedure successfully completed.
SQL> PRINT (顯示出在sqlplus定義變數內容,也可設定set autoprint on,這樣procedure執行完後會自動顯示內容)
SS
----------
1
BB
--------------------------------
20110101
AA
--------------------------------
Test
SQL> quit;
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(0) 人氣(1,549)

  • 個人分類:Oracle
▲top
  • 7月 16 週六 201102:28
  • SQL語法查詢結果去除重複性資料

SQL查詢時,一個資料表的某欄位可能會有多相同值的情況,此時透過SELECT的關鍵字 DISTINCT 來去除重複的紀錄,相同資料只顯示一筆紀錄。
測試資料: 資料表 UsrData
ID    NAME    CITY
----------------------------------------
01    張三    台北
02    李四    高雄
03    王五    台北
04    老六    台中
05    七七    台中
一般查詢:
SELECT city FROM UsrData;
結果:
台北
高雄
台北
台中
台中
使用關鍵字查詢:
SELECT DISTINCT city FROM UsrData;
結果:
台北
高雄
台中
查詢結果去除重複性資料,單一資料一樣會列出顯示。
(繼續閱讀...)
文章標籤

mark528 發表在 痞客邦 留言(3) 人氣(90,823)

  • 個人分類:Oracle
▲top
1

文章搜尋

好康資訊

熱門文章

  • (16,019)Excel:如何讀取固定欄位值
  • (15,178)用 excel 來記錄體重及體脂肪
  • (336)紙模:史上最強的水管工 馬力歐
  • (11,740)Shell Script:運用 date 指令取得日期時間(Linux)
  • (7,234)Shell Script: 控制文字顏色
  • (1,927)Perl: 快速分解檔案路徑及名稱。 use File::Basename
  • (670)模型:鋼彈:Gundlander 鋼德勇士
  • (11,149)忘記PostgreSQL資料庫管理者密碼,要如何重新設定
  • (4,863)Oracle內建常用字串函數
  • (309)紙模:能天使貓型鋼彈

文章分類

toggle 資料庫 (5)
  • DB2 (8)
  • SQL Server (6)
  • MySQL (7)
  • Oracle (10)
  • PostgreSQL (6)
toggle 手工物製作 (3)
  • 模型 (25)
  • PaperCraft (110)
  • 手帳 (3)
toggle 學習心得 (3)
  • PMP (1)
  • 讀書心得 (2)
  • 學習心得 (17)
toggle 程式設計 (15)
  • 專案管理 (1)
  • Websphere (1)
  • HTML (3)
  • Visual C++ (8)
  • Windows 8 (1)
  • Java (20)
  • JSP (4)
  • Web (6)
  • C# (11)
  • Windows Scripting Host (1)
  • Shell Script (3)
  • ASP.NET (6)
  • WebPI (1)
  • PHP (5)
  • Perl (7)
toggle 生活綜合 (2)
  • 生活資訊 (73)
  • 生活雜記 (25)
toggle 網路資源 (2)
  • 圖像和圖示 (3)
  • 網路空間應用 (1)
toggle 軟體應用 (5)
  • Windows 8 (1)
  • CentOS (7)
  • excel (6)
  • iphone (25)
  • 虛擬軟體 (2)
  • 未分類文章 (1)

文章精選

個人資訊

mark528
暱稱:
mark528
分類:
圖文創作
好友:
累積中
地區:

參觀人氣

  • 本日人氣:
  • 累積人氣: