Posts Tagged ‘SQL’

Oracle日付をWHEREに指定する方法

木曜日, 6月 9th, 2011

WHERE句で、条件指定する値の側にもTO_DATEは付けられるのね。。。
基本を知っていれば分かりそうなものだが、
いざとなると書けないので覚書。

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(‘2011/06/03’, ‘YYYY/MM/DD’)
ORDER BY timestamp;

ちなみに、時刻まで指定したければ

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(‘2011/06/03 00:00:00’, ‘YYYY/MM/DD HH24:MI:SS’)
ORDER BY timestamp

ちなみに、今日のデータを対象にしたければ

SQL> SELECT * FROM plan_table
WHERE timestamp > TO_DATE(TO_CHAR(SYSDATE, ‘YYYY/MM/DD’), ‘YYYY/MM/DD’)
ORDER BY timestamp

#SYSDATEを使っている時点で、今日以降のデータなんてあり得ない。
 不等号を使っているので、今日以降という言い方ができるがあえて、
 今日のデータと表記した。

個人情報の一部をマスクするSQL

日曜日, 5月 29th, 2011

電話番号の一部をマスクして更新する。
03-1111-1111のようにハイフンつき12桁を想定。

SQL> UPDATE 顧客マスタ set 電話番号 = substr(電話番号, 0, 8)||’****’;
10行が更新されました。

電話番号の一部をマスクして表示する。
03-1111-1111のようにハイフンつき12桁を想定。

SQL> SELECT SUBSTR(電話番号, 0, 8)||’****’ AS 電話番号 FROM 顧客マスタ;

電話番号
——————————————————————————–
03-1111-****
03-2222-****
052-111-****

[参考]
Oracle Technology Network (OTN) Japan – 掲示板:項目の指定の一部のみをupdateする方法

SQLチューニングで参考になったサイトをメモ

水曜日, 4月 27th, 2011

SQLチューニングで参考になったサイトをメモ

■SQL単位の実行時間を計測する
SQL> set timing on
SQL> ここで、計測したいSQLを流す。
止めたくなったら
SQL> set timing off

参考
SQLの実行時間を表示する
■INよりEXISTSのほうが早いことが多い
SELECT ~ FROM emp
WHERE EXISTS (
SELECT * FROM emp2 WHERE emp.id = emp2.id)

EXISTS句でつかうSELECTの次は、アスタリスクが有効らしい。

参考
2つの副問い合わせの違い IN 条件か EXISTS 条件か
OracleのEXISTS句で質問です。 EXISTSの後のSELECT文で…

■FROM句の記述順序
 レコードが多いテーブル順に記述する。

■WHERE句の記述順序
 レコードが少ないテーブル順に記述する。

参考書籍として
プログラマのためのSQL
(ジョー・セルコ 著 秋田 昌幸 訳 ピアソン・エデュケーション 発行)
があります。
この本のポイントが、
SQLを速くするぞにまとめられていて、この本を読む前に予備知識として参考になった。