ユーザ用ツール

サイト用ツール


it技術:データベース:sqlserver

文書の過去の版を表示しています。


SQLServer

日時変換

日時変換はCONVERT関数を使うのが一般的ですが、書式変換があまり直感的ではない。
SQLServer2008 R2以降では、FORMAT関数が使えます。

SELECT CONVERT ( VARCHAR, GETDATE(), 111 ) AS 日付1
     , CONVERT( VARCHAR , GETDATE (), 108 ) AS 時刻1
 
日付1 時刻1
2016/10/26 17:33:32
 
SELECT FORMAT( GETDATE (), 'yyyy/MM/dd' ) AS 日付2
     , FORMAT( GETDATE (), 'HH:mm:ss' ) AS 時刻2 
 
日付2 時刻2
2016/10/26 17:33:32

日付のみで抽出

SQLServer 2008からは日付のみのDate型が使えるようになったので、DateTime型をDate型にキャストすることで日付のみの抽出を行う。

SELECT * FROM TICKET
WHERE CAST(OccurredDate AS DATE) >= CAST(GetDate() AS DATE)

文字列日時から日付型に変換

SQLServerのSTUFF関数で半角スペースと':'を挿入し、yyyyMMdd HH:mm:ss形式にすることで、CONVERT関数そのままDateTime型にキャストすることが可能。

SELECT CONVERT(DateTime,stuff(stuff(stuff('20210122235959', 9, 0, ' '), 12, 0, ':'),15, 0, ':'))

結果
2021/01/22 23:59:59

コマンドライン実行

SQL ServerをCUIで管理するツールとしては、現在ではsqlcmdが推奨されているが、それ以外にもisql(廃止)やosql(非推奨)というコマンドもある(あった)

表示値 (N/A)となる場合

“EXIT()“で囲むことで、ERRORLEVELにリターン値として格納することができます。
BOM監視の設定にて、プログラム名「sqlcmd」で引数「-U Fuga -P Hoge -h-1 -Q “EXIT(set nocount on select '0')“」とする。※osqlのままでは駄目だった
参照:【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法

値が取得できない場合

スクリプトの先頭に「SET NOCOUNT ON」を入れることで「何件処理されました。」の処理件数が非表示となり、ERRORLEVELにリターン値をセットされます。

トレース実行

SQL Server Profilerのトレース機能を使用するためには、実行するにはユーザーにAlter Traceアクセス権限を許可する必要があります。 参照:SQL Server Profilerの実行権限設定 / 許可 / 拒否 / プロファイラー

USE [master]
GRANT ALTER TRACE TO [WH_KOUSEI]

WHERE条件時に末尾空白を無視

SQL Server における可変長文字列の末尾の空白について
SQLServerのvarchar型は末尾空白をセットすることが出来るが、「WHERE条件時に末尾空白無視する仕様」になっている。 これは、ANSI/ISO SQL-92 specification にのっとった仕様でバグではありません。
※Oracleはverchar2型で末尾空白は無視しない。※文字列比較セマンティクス

パラメータークエリ

プレースホルダーは「@」となる。@NAMEとして使用する。ちなみに、Oracleのプレースホルダーは「:」である。

it技術/データベース/sqlserver.1611273992.txt.gz · 最終更新: 2021/01/22 09:06 by yajuadmin