ISO 8601
日付形式を必要とする仕様が与えられましたが、誰もが変換コードを知っているか、これら2つの例を取得する方法を知っていますか。
ISO 8601 Extended Date 2000-01-14T13:42Z
ISO 8601 Basic Date 20090123T105321Z
SQL Serverで日付を処理する場合、言語や文化の設定に関係なく機能するため、ISO-8601形式がおそらく最適な方法です。
SQL Serverテーブルにデータを挿入するために、変換コードなど何も必要ありません-日付をリテラル文字列として指定するだけです
INSERT INTO MyTable(DateColumn) VALUES('20090430 12:34:56.790')
これで完了です。
SELECTで日付列をISO-8601形式に変換する必要がある場合は、変換コード126または127(タイムゾーン情報付き)を使用してISO形式を実現できます。
SELECT CONVERT(VARCHAR(33), DateColumn, 126) FROM MyTable
あなたに与える必要があります:
2009-04-30T12:34:56.790
この
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)
これを生成します
2009-05-01T14:18:12.430
これについての詳細は [〜#〜] msdn [〜#〜] にあります。
末尾のZを含むISO8601形式で日付を出力するだけで、少なくともSQL Server 2012を使用している場合は、FORMAT
を使用できます。
SELECT FORMAT(GetUtcDate(),'yyyy-MM-ddTHH:mm:ssZ')
これにより、次のようなものが得られます。
2016-02-18T21:34:14Z
まあ、いいえ!!!書式設定された日付をSQL Serverに保存すると、怪我の世界を求めています。常に日付と時刻、およびSQL Serverの「日付/時刻」データ型(DATETIME、DATE、TIME、DATETIME2など)のいずれかを保存します。フロントエンドコードで表示方法を解決し、ファイルを作成するステージングテーブルを作成するときにフォーマットされた日付のみを保存します。 SQL ServerのISO日付/時刻形式を絶対に表示する必要がある場合は、表示時にのみ表示してください。強調することはできません...書式設定された日付/時刻をSQL Serverに保存しないでください。
{編集}。これには多くの理由がありますが、最も明白なのは、ニースISO形式(並べ替え可能)であっても、将来のすべての日付の計算と検索(たとえば、特定の月のすべての行の検索)には少なくとも暗黙の変換(余分な時間がかかります)で、保存されている書式設定された日付が現在必要な形式でない場合、まず日付に変換してから、必要な形式に変換する必要があります。
同じことがフロントエンドコードにも当てはまります。書式設定された日付(テキスト)を保存する場合、Windowsまたはアプリで定義されたローカル日付形式を表示するには、同じ回転が必要です。
私の推奨事項は、日付/時刻を常にDATETIMEまたは他の一時データ型として保存し、表示時刻でのみ日付をフォーマットすることです。
ISO日付について言えば、技術的には2つのオプションがあります。
一般的に、Date values alone OR日付をニュートラルな方法で永続化することを検討している場合、Microsoftはymd
またはy-m-d
。どちらも有効なISO形式です。
フォーム '2007-02-12'は、DATE、DATETIME2、およびDATETIMEOFFSETのデータ型についてのみ、言語に依存しないと見なされることに注意してください。
このため、最も安全な方法は、always neturalymd
形式に基づいて永続化/フィルタリングすることです。
コード:
select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)