1
1

More than 1 year has passed since last update.

SQLServerでよく利用するSQL文

Last updated at Posted at 2021-05-19

日本時間を表示する

hoge.sql

#日本標準時は、UTC  9時間を加算したものなので、次のように DATEADD 関数を利用して取得することができます。
DATEADD(hour, 9, SYSUTCDATETIME())

現在の時刻から年月

hoge.sql
#202209
CONVERT (VARCHAR(6), GETDATE(), 112)

#2022/09/09
FORMAT(GETDATE(), 'yyyy/MM/dd')
FORMAT(dbo.PC_START_END.DATE, 'yyyy/MM/dd')

#12:15:11
FORMAT(dbo.PC_START_END.DATE, 'HH:mm:ss')

#当月の月初-月末のWHERE構文
BETWEEN FORMAT(GETDATE(), 'yyyy/MM/01') AND FORMAT(GETDATE(), 'yyyy/MM/31')

四捨五入して整数化する

hoge.sql

#小数点第一を四捨五入して整数化
CEILING(ROUND(ZEIRITSU, 1))

頭にゼロを付ける

hoge.sql

FORMAT(ISNULL(GZSEQ, 0), '0000')

条件文

hoge.sql

--定番のパターン
CASE WHEN K_DATE < '2018-12-31' THEN ISNULL(SKU , 0) ELSE 0 END

CASE WHEN KBN = 1 OR SID_GZKBN = 3 THEN 'A区分' ELSE '""' END


--単純CASE式
CASE gender
    WHEN '' THEN 1
    WHEN '' THEN 2
    ELSE 99
END

--検索CASE式
CASE
    WHEN gender = '' THEN 1
    WHEN gender = '' THEN 2
    ELSE 99
END


--IN句を使った条件式
CASE
    WHEN prefecture IN ('北海道') THEN '北海道'
    WHEN prefecture IN ('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') THEN '東北'
    WHEN prefecture IN ('沖縄県') THEN '沖縄'
    ELSE NULL
END

参考:https://qiita.com/sfp_waterwalker/items/acc7f95f6ab5aa5412f3

数値から文字列に変換

hoge.sql

CONVERT (varchar, ISNULL(suti, 0))

CAST(Suchi AS varchar) 

文字を抽出

hoge.sql
/*第一引数(文字列) 第二引数(開始地点) 第三引数(文字数) */
/* 345 */

SUBSTRING('12345678', 3, 3);

文字列の結合

hoge.sql

Name1+Name2

DateTimeを変換する

hoge.sql
--年月にする       202007
FORMAT(SDATE,'yyyyMM')

--年月日にする     20200707
FORMAT(SDATE,'yyyyMMdd') 

--年/月/日にする 2020/07/07
FORMAT(SDATE,'yyyy/MM/dd')

--年/月/日にする 2020年07月07日
FORMAT(SDATE,'yyyy年MM月dd日')

今日からnヶ月前

hoge.sql

DATEADD(month, -2, GETDATE())
DATEADD(year, -2, GETDATE())
DATEADD(day, -2, GETDATE())

DELETE と JOIN を使ってデータを削除するSQL文

JOINを使って結合して条件指定したレコードを削除したい場合は以下のコード

「テーブル名 AS 代替テーブル名」を使うようだ。

hoge.sql
DELETE HJNH FROM TP_HJN_H AS HJNH 
LEFT OUTER JOIN  V_HDB_DRN_1year AS VHDB O
N HJNH.HJN_H_NDEN_DRN = VHDB.HDB_NDEN_DRN 
WHERE(VHDB.HDB_N_S_DATE < DATEADD(month, -2, GETDATE()))

サブクエリ

Fromに引用するSQL文を入れることでビューのように利用できる。
image.png

逆クロス集計

UNPIVOT.sql
SELECT
 PAC_SKEY_JYA, PAC_SKEY_SCD, PAC_SKEY_KIK, LEFT(PAC_NO, 9) AS PACCL, PAC_SU
FROM
 M_PAC_01 AS p 
UNPIVOT (PAC_SU FOR PAC_NO IN (PAC_NAI00_KOS, PAC_NAI01_KOS, 
 PAC_NAI02_KOS, PAC_NAI03_KOS, PAC_NAI04_KOS,
 PAC_NAI05_KOS, PAC_NAI06_KOS, PAC_NAI07_KOS, PAC_NAI08_KOS, 
 PAC_NAI09_KOS)) AS unpvt
WHERE                       
 PAC_SU > 0;
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