LoginSignup
1
1

More than 5 years have passed since last update.

SQLServer 日付の扱い(SELECT,CASE)

Last updated at Posted at 2018-04-11

はじめに

仕事でSQLServerを扱っており、SELECTやプロシージャを作成する時に日付型を使うことが多いのですが、よく忘れて調べ直すことが多いので、まとめてみました。

YYYYMMDDの形式で表示

まずGETDATE()で2018-04-10 19:00:00.000のように表示されます。

これを2018-04-10にするためには、、

/* INT型の変数定義 */
DECLARE @TODAY AS INT;
/* -を置換して変数に代入 */
SET @TODAY = REPLACE(CONVERT(date,GETDATE()),'-','');

→ 20180410 と今日の日付が表示される

それでは、これを一緒にSELECTしてみます。

/* 変数定義 */
DECLARE @TODAY AS INT;
SET @TODAY = REPLACE(CONVERT(date,GETDATE()),'-','');

SELECT 
    @TODAY [YYYYMMDD],   --YYYYMMDD形式
    GETDATE() [現在時刻] --変換前

▼実行結果

YYYYMMDD 現在時刻
1 20180410 2018-04-10 19:54:32.290

今回は一度変数に入れていますが、直接SELECT文に書いても大丈夫です。

様々な形式で表示

Salesforceに取り込む時は、この型で取り込むので個人的によく使います。

SELECT
FORMAT(CONVERT(date,getdate(),111),'yyyy-MM-ddT00:00:00.000Z') [好きな形式で]

▼実行結果

好きな形式で
1 2018-04-10T00:00:00.000Z

数値かどうかを判断する(数値だったら1を返す)

◾️ISNUMIC(値)
値が数値の場合1、数値でない場合0を返します。
個人的には、プロシージャで数値以外を入れてはいけない時、CASE文で数値以外の場合ブランクにする、といったような使い方をしています。

SELECT
CASE ISNUMERIC(1) 
    WHEN '1' THEN '数値です'
    ELSE '数値ではないです'
END [TEST1]
,CASE ISNUMERIC('a') 
    WHEN '1' THEN '数値です'
    ELSE '数値ではないです'
END [TEST2]

▼実行結果

TEST1 TEST2
1 数値です 数値ではないです

ちなみにSQLServerのCASE文はこのようなイメージです。

CASE 対象の項目、値
  WHEN この値のとき THEN こう表示する
  ELSE 当てはまらなかったらここを表示
END [項目名]
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1