![]()
SQLクリニック(2) Page
1/3日付データ演算の達人技を伝授する 【第1話】
株式会社インサイトテクノロジー
山下正
2005/3/26
本連載はSQLの応用力を身に付けたいエンジニア向けに、さまざまなテクニックを紹介する。SQLの基本構文は平易なものだが、実務で活用するには教科書的な記述を理解するだけでは不十分だ。本連載は、著名なメールマガジン「おら! オラ! Oracle - どっぷり検証生活」を発行するインサイトテクノロジーのコンサルタントを執筆陣に迎え、SQLのセンス向上に役立つ大技小技を紹介していく。(編集局)
| 主な内容 --Page 1--
--Page 2--
--Page 3--
|
今回は、データベースに必ず付いてくる(?)日付データを取り扱うSQLについて解説します。日付データは、スケジュール管理や日付、期間ごとの集計、あるいは、特定の期間を過ぎたデータを対象としたメンテナンスなど、データそのものとして、また、ある種のデータを取り扱うために必要不可欠なキーとして重要なデータです。
しかし、普通の数値と同じように扱うには、少し厄介ですね。その最たるところは、日付データの演算です。60進法、24進法、はたまた各月の日数が異なるなど、一筋縄ではいかないことは皆さんも重々ご承知のことでしょう。これをうまく取り扱うため、Oracleには日付データに適したデータ型が用意されています。また、これら日付時刻型のデータを扱うための関数も用意されています。これからOracleに携わる方は必ず覚える必要があります。すでに日付データの扱いに慣れていらっしゃる方も、いま一度整理のためにお付き合いください。
まず初めに、日付データを取り扱う際に注意しておかなくてはいけないパラメータがありますので、これについて整理しておきましょう。
日付フォーマットでよく使うNLSパラメータは以下のとおりです。
- NLS_DATE_FORMAT
- NLS_TIMESTAMP_FORMAT
- NLS_TIMESTAMP_TZ_FORMAT
NLS関連のパラメータは、下記のビューで確認できます。一度確認してみてください。
- NLS_DATABASE_PARAMETERS
- NLS_INSTANCE_PARAMETERS
- NLS_SESSION_PARAMETERS
今回チェックしておくべきパラメータは、NLS_SESSION_PARAMETERSで確認できます。
SQL> select * from nls_session_parameters; |
| リスト1 NLSパラメータの確認 |
上記のように、日付データの表示フォーマットがNLSパラメータによって定義されています。これらはそれぞれの環境に適切な設定がされるので、同じSQLを実行しても表示が異なり戸惑うことがあります。
では上記を踏まえて、日付データの操作について解説します。まずは、演算方法を見ていきましょう。
Oracle9iからはDATE型に加えて、TIMESTAMP型というデータ型が増えています。これも日付データ型です。取り扱えるデータの精度が異なるのですが、以下の演算についてはDATE型のデータと同様に使用できます。下記には、SYSDATE関数(DATE型)、SYSTIMESTAMP関数(TIMESTAMP型)を使った演算例を挙げます。
【日付データの加(減)算】
| 日の加(減)算 | |
| SYSDATE + 1 | SYSTIMESTAMP + 1 (*1) |
| 時の加(減)算(1/24) | |
| SYSDATE + 1/24 | SYSTIMESTAMP + 1/24 (*1) |
| 分の加(減)算(1/24/60) | |
| SYSDATE + 1/24/60 | SYSTIMESTAMP + 1/24/60 (*1) |
| 秒の加(減)算(1/24/60/60) | |
| SYSDATE + 1/24/60/60 | SYSTIMESTAMP + 1/24/60/60 (*1) |
| 月の加(減)算(ADD_MONTHS) | |
| ADD_MONTHS(SYSDATE,1) | ADD_MONTHS(SYSTIMESTAMP,1) (*2) |
| 年の加(減)算(ADD_MONTHS) | |
| ADD_MONTHS(SYSDATE,1*12) | ADD_MONTHS(SYSTIMESTAMP,1*12) (*2) |
ADD_MONTHS関数の注意事項 |
(*1)TIMESTAMP WITH TIME ZONE型からDATE型に変換されるので注意。DATE型に変換したくない場合は、後述のTO_DSINTERVAL関数など期間データ型を使用する。
(*2)TIMESTAMP WITH TIME ZONE型からDATE型に変換されるので注意。DATE型に変換したくない場合は、後述のTO_YMINTERVAL関数など期間データ型を使用する。
どうでしょうか。上記の計算方法は比較的よく使います。これが使えれば、アプリケーションで必要な大半の日付処理を記述することが可能ではないでしょうか。演算の単位が1日であるということを認識できれば、覚えるのも簡単ですね。ADD_MONTHS関数は月末日の取り扱いに注意が必要なので、気を付けてください。(次ページへ続く)
| 1/3 |
| Index | |
| 連載 SQLクリニック(2) 日付データ演算の達人技を伝授する 【第1話】 |
|
| Page 1 ・日付型データについて ・NLSパラメータを確認しておこう ・日付データの演算 |
|
| Page 2 ・特定日の取得 |
|
| Page
3 ・期間の取得 |
|
| SQLクリニック |
ホワイトペーパー(TechTargetジャパン)
- ここまでできる! CouchDBパワーアップ作戦 (2010/3/18)
さらに一歩踏み込んで、実運用のためのノウハウを知りましょう。全文検索、ユーザー認証、負荷分散手法を解説します - 診断ツールでデータベースの健全性を保つ (2010/3/5)
DBをセキュアに保つには、日々のチェックが重要。診断ツールを運用に組み込むことが、情報漏えい対策の第一歩です - トムが説く、エンジニアがしてはならないこと (2010/3/2)
Oracleエンジンそのものをデザインする男、トム・カイト。カリスマエンジニアが説明する、陥りやすい「ぼくたちの失敗」とは - “スコット”といえばなんと答える? (2010/2/22)
ツーといえばカー、スコットといえばもちろん! そんな根っからのDB人間チェックや週末の勉強会など、2月もDB漬けでした
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |






