web-dev-qa-db-ja.com

「YYYYMMDDHHMMSS」形式の文字列を日時に変換します

文字列をdatetimeに変換することについては、多くの質問が投稿されていることを認識していますが、20120225143620のように秒を含む文字列を変換するための質問は見つかりませんでした。

各セグメントをサブストリング化して/および:と連結せずに、クリーンな変換を実行しようとしました。

誰か提案はありますか?

13
sadmicrowave

STUFF()メソッドを使用して文字列に文字を挿入し、SQL Serverが理解できる値にフォーマットすることができます。

DECLARE @datestring NVARCHAR(20) = '20120225143620'

-- desired format: '20120225 14:36:20'
SET @datestring = STUFF(STUFF(STUFF(@datestring,13,0,':'),11,0,':'),9,0,' ')

SELECT CONVERT(DATETIME, @datestring) AS FormattedDate

出力:

FormattedDate
=======================
2012-02-25 14:36:20.000

このアプローチは、文字列が常に同じ長さと形式である場合に機能し、文字列の末尾から先頭まで機能して、次の形式の値を生成します:YYYYMMDD HH:MM:SS

この場合、SQL Serverはフォーマットされた日付を理解できるため、日付の部分を分離する必要はありません。

関連資料:

STUFF(Transact-SQL)

STUFF関数は、文字列を別の文字列に挿入します。最初の文字列の開始位置にある指定された長さの文字を削除し、2番目の文字列を最初の文字列の開始位置に挿入します。

STUFF(character_expression、start、length、replaceWith_expression)

21
Tanner