#いちいち調べるのが面倒くさい・・
最近、SQLServerでのクエリ開発を行っていますが
毎回ちょっとした関数のフォーマットを調べるのが面倒でなりません!
そこで、自分がよく使う関数フォーマットを備忘録的にまとめた記事を作成しました。
#SQLServerの関数フォーマット
####1.文字列切り取り
・LEFT(切り取りたい文字列, "左"から何文字分切り取るか)
例:LEFT('12345', 2)⇒'12'
・RIGHT(切り取りたい文字列, "右"から何文字分切り取るか)
例:RIGHT('12345', 2)⇒'45'
・SUBSTRING(切り取りたい文字列, 切り取り開始位置, "開始位置"から何文字分切り取るか)
例:SUBSTRING('SUBSTRING', 4, 6)⇒'STRING'
####2.日時取得
・GETDATE()
例:GETDATE()⇒2016-01-30 10:30:30.300
・YEAR(取得対象)
例:YEAR(GETDATE())⇒2016
・MONTH()
例:MONTH(GETDATE())⇒1
※01ではない事に注意。
・DAY()
例:DAY(GETDATE())⇒30
・DATEDIFF(日時差の計算基準, 日時1, 日時2)
例:DATEDIFF(d, '2016/01/01', '2016/01/05')⇒4
※dは午前0時を迎える度に、カウントが増加する。
⇒d以外の基準
・DATEADD(増減箇所, 増減値, 増減対象)
例:DATEADD(mm, 1, CONVERT(date, '2016/01/05'))⇒2016/02/05
※DATEADDは、増減対象が日付型の場合のみ使用可能な事に注意。
####3.型変換※[]は、指定なし可能
・CONVERT(変換後の型, 変換対象, [フォーマット])
例:CONVERT(date, '2016/01/01(※varchar型)')⇒2016/01/30(※date型)
<補足①>
変換後の型の種類(代表的な一部)
数値:int, decimal, float
日時:date, time, datetime
文字列:varchar
<補足②>
日時⇒文字列変換時のフォーマット
★CONVERT(VARCHAR, GetDate()) ⇒ 01 30 2016 10:30PM
★CONVERT(VARCHAR, GetDate(), 101) ⇒ 02/11/2007
★CONVERT(VARCHAR, GetDate(), 102) ⇒ 2007.02.11
★CONVERT(VARCHAR, GetDate(), 103) ⇒ 11/02/2007
★CONVERT(VARCHAR, GetDate(), 111) ⇒ 2007/02/11
★CONVERT(VARCHAR, GetDate(), 120) ⇒ 2007-02-11 12:34:56
※その他のフォーマット
以下、追記。(2016/12/13)
#関数を使ってクエリを書いていく中で・・(+α:チューニング)
これまでは、想定通りのデータを抽出することに注力してきましたが
処理の遅さが気になってきたこの頃です。
そこで初めて、"チューニング=処理を早くするクエリの記述方法"を先輩から教わりました。
こちらも、備忘録がてらにまとめておこうと思います。
チューニングを行う中で、インデックス(見出し)という考え方が重要になってきます。
ここでは、インデックスについての説明は割愛します。※詳しくは上記リンクにて。
・SELECT句では、必要以外に*を使わない
⇒単純にカラム数が増えるため、検索速度が低下
・WHERE句の左辺側では、カラムに対して処理を行わない
⇒インデックスが無効となり、検索速度が低下
・<>条件を複数指定したい場合は、NOT INで代用する
⇒複数指定すると、走査も複数回になるため、検索速度が低下
・テーブル名に別名をつける
⇒「短い」別名をつけることにより、単純にソース文字数が減り処理速度が向上
・UNIONとUNION ALLの使い分け
⇒UNIONを多用しすぎると、重複行の削除に時間がかかってしまい、処理速度が低下