トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
開発者必見! 覚えておきたいSQL Serverの便利機能
文=株式会社システムインテグレータ 堀 真人
第6回
SQL構文の違いを押さえる!
DB技術者の共通言語ともいえるSQL。知ってのとおり、SQLは世界的に規格化されています。Oracleでひと仕事こなせる人なら、SQL Serverになじむのも難しくはないでしょう、しかし共通規格の常として、先進的な製品を後追いで規格化するという流れになりますから、細かい文法になると文法の違いなどで、初心者は手間取ることでしょう。今回はそういったSQL構文を紹介していきます。
Tips 1

日付を取る! SYSDATEはGETDATEで!


Oracle で日付を取るときは、 SYSDATE 。もう、皆さん呪文のようにこう書くでしょう。

SELECT SYSDATE FROM DUAL;
2004/05/11 08:44:45

実際の表を読みに行かないときには、ダミー表のDUALを指定しますよね。SQL ServerではSYSDATEのかわりにGETDATE関数を使います

SELECT getDate()
2004-05-11 08:40:08.640

FROM句以降がないのに気が付きましたか? SQL Serverでは、テーブルからデータを取らないSELECT文では、FROM句以降は必要ありません。また、日付のデータが、OracleのDATE型では秒単位までなのに対して、SQL ServerのDATETIME型は秒以下のレベルもあることに注意しましょう。

さらに日付の加工も少し違ってきます。日付データの時刻切捨ての方法を確認しましょう。Oracleでは、日付データにTRUNC関数を使うことで、日時の情報だけを取り出せます。

select trunc(sysdate) from dual

SQL Serverでは、時刻を切り捨てる関数はないので、以下のように工夫します。

select convert (datetime,convert (nvarchar,getdate() ,111),120)

これは日付を一度文字列に変換して、年月日だけを切り取った後に、さらに日付に戻しています。

日付型データに関しては、OracleもSQL Serverも時刻部分を省略したときに00:00:00(午前0時)扱いになるのは同じです。

ほかにも、SQL Serverには以下のような日付関数があります。

DATEADD 日付に日数を加算する
DATEDIFF 日付同士の差を取得する
DATEPART 日付の月や年などを部分的に取り出す
DAY 「日」を取り出す
MONTH 「月」を取り出す
YEAR 「年」を取り出す



Tips 2

NVLではなくISNULL


DBを使うアプリでは必ず出てくるNULLの置き換え。OracleではNULLを置き換えるときにはNVL関数を使います。

SELECT NVL(顧客名,'NULLです') FROM 顧客
山田里絵
NULLです

SQL Serverでは、以下のようにISNULL関数を使って記述します。

SELECT ISNULL(顧客名,'NULLです') FROM 顧客
山田里絵
NULLです

SQL Serverでは、NULL以外にも、CASE文を使って、さらなる置き換えができます。以下のSQLでは、顧客テーブルの顧客区分の値を具体的な名称に置き換えています。

SELECT
case 顧客区分
when '1' then '通常顧客'
when '2' then '得意客'
when '3' then '要注意客'
when null then '区分なし'
else 'その他' end
from 顧客

顧客区分が'1'なら'通常顧客'、'2'なら'得意客'、'3'なら'要注意客'、nullなら'区分なし'、それ以外は'その他'に置き換えています。case文は現場で大活躍するので、ぜひ覚えておきましょう。



Tips 3

ROWNUMはTOP句で!


「入社順に絞り込んだ社員を上位10件だけ取得したい」こういうとき、OracleではROWNUM関数を使ってクエリの上位絞込みをします。

SELECT * FROM ( SELECT 顧客名,入社日 FROM 顧客 ORDER BY 入社日 ASC )
WHERE ROWNUM <=10

SQL Serverの上位絞りこみはもっと明解で、Top句を使います。

SELECT TOP 5 顧客名,入社日 FROM 顧客 ORDER BY 入社日 ASC

このように、構文こそ違えど、OracleとSQL ServerのSQLは似たような関数を持っており、業務アプリに必要な処理で事欠くことはありません。こういう定番処理を知っていると、業務の導入時期に余計な苦労を背負わなくてすみます。




・ 第1回 SQL クエリアナライザのクエリ実行機能
・ 第2回 SQL クエリアナライザ Part 2
・ 第3回 開発者のための、日常的バックアップの小ワザ
・ 第4回 SQL Server 転ばぬ先の杖!
・ 第5回 エラーをやっつけろ!
・ 第6回 SQL構文の違いを押さえる!
・ 第7回 Transact-SQLをマスターしよう!
・ 第8回 パフォーマンス監視ノウハウ


著者プロフィール
株式会社システムインテグレータ
堀 真人(HORI, Masato)

http://www.sint.co.jp/

新横浜で2年半Oracleを使い、埼玉に飛んでからはSQLServerと戦う毎日を送る“DBバイリンガル”な27歳。
ITとは、「アイデアを支えるテクノロジー」と心得る。
趣味はレゲエとSQL Server。愛読書はレゲエ専門誌「Riddim」とデータベース専門誌「DBマガジン」。

← 特集!DBバイリンガル 目次

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.