顯示具有 SQL 標籤的文章。 顯示所有文章
顯示具有 SQL 標籤的文章。 顯示所有文章

2014年7月1日 星期二

[Oracle SQL]使用update指定修改日期欄位

最近遇到日期轉換錯亂的問題

因為程式中在還沒完全改成民國年的情況下就執行

會導致儲存到Oracle上之後

出現3925年(1911+2014)這種結果

但要把時間改回2014年資料有上千筆當然不可能一個一個去改

當然還是要靠update的指令

但問題來了

如果你直接去用to_date改日期

最後的結果可能是變成2014/07/01 00:00:00

原本的時分秒可能因為沒指定被蓋掉

那麼要如何只改年不動到月日時分秒呢?

後來我問到的方法如下

update Login k set k.date=ADD_MONTHS(k.date,-1911*12)
where to_char(k.date,'yyyy')='3925';

這段的意思是說我將現有的時間減掉1911*12個月

至於where的部份必須要用to_char取得年

因為如果是用to_date的話會變成3925/07/01 00:00:00這種結果

當然你的時分秒不會剛好是00:00:00

所以也不會找到符合的結果

2014年6月16日 星期一

[Oracle SQL]如何看到某個時間點的資料內容

ㄜ…因為上禮拜不小心用delete刪了某位大嬸測試資料

搞的他老人家暴怒~

還好強者我同事最後還是幫我把資料復原回來

最後強者同事跟我分享如何還原的方式在此做個紀錄

SELECT * 「你的table」 AS OF TIMESTAMP TO_DATE('13-06-14 09:00:00','DD-MM-YY HH24:MI:SS')


在PL/SQL上輸入以上內容可以看到該table在某個時間點的資料內容

你就可以幫當下的資料記錄下來存回資料庫

但是你能看到多久之前的資料要看系統設定

最後還是感謝強者同事讓我免於大嬸的碎唸

2014年4月16日 星期三

[SQL]如何在OracleSQL中實現top的功能

最近在用Oracle SQL才發現原來Oracle SQL沒有top這個功能

一般在SQL Server或是MySQL中都有top的指令讓使用者挑出前n筆資料

像是這樣
select top 10 * from test

表示從test這個table挑出前十筆資料

連AS400都有這個功能top這個功能沒想到Oracle SQL居然沒有?

不過這也不是什麼問題當然還是有解決方式

在Oracle SQL要這樣寫
select * from test where rownum<=10
這樣會列出最前面的十筆 如果需要排序後的結果再取前十筆要這樣寫 例如要以id的欄位來排序
select * from (select * from test order by id desc) where rownum<=10

因為rownum在Oracle SQL執行的順序會早於 order by或group by

所以要以排序完的結果再取前十筆才會正確顯示