問題:
SQLServerで日付と時刻を含む文字列をTIME値に変換したい。
曜日の名前、日付、時刻を含む文字列をTIME値に変換する必要があります。
ソリューション1:
PARSE()
を使用します 働き。作成するクエリは次のとおりです。
SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
結果は次のとおりです。
11:23:11.1134505
ディスカッション:
PARSE()
を使用します 曜日の名前、日付、および時刻を含む文字列をTIMEデータ型に変換する関数。この関数は、変換する文字列、キーワードAS、および新しいデータ型(この例では、TIME
)を受け取ります。 )。文字列には、このデータ型を表す値が含まれている必要があります。この例では、文字列'February 2, 2020 11:23:11.1134505'
時間値を格納します。
時刻はこの文字列の一部であり、曜日の名前も含まれていることに注意してください。 CONVERT()
は使用しないでください またはCAST()
この場合の機能;また、TIMEデータ型を返しますが、曜日は返しません。
サーバー言語とは異なる話し言葉を使用している場合は、キーワードUSINGと適切なカルチャコードを含めます。ポーランド語の場合は、次のように記述します。
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
カルチャパラメータ値の詳細については、SQLServerの公式ドキュメントを参照してください。
この場合、PARSE()
を使用する必要があります 最高のパフォーマンスではありませんが、機能します。 しない時間値を表す文字列を操作している場合 追加のデータ(曜日の名前など)を保存するには、CASE()
を使用します 働き。これが例です。
ソリューション2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
結果は次のとおりです。
11:23:11.1134505
変換する日付と時刻を含む文字列は、T-SQLの日付と時刻のデータ型の形式である必要があります。詳細については、SQLServerのドキュメントを参照してください。
CAST()
関数はANSISQL標準であり、そのパフォーマンスはCONVERT()
よりも優れています。 またはPARSE()
。
最後に、CONVERT()
を使用することもできます 働き。次の例を見てください。
ソリューション3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
結果:
11:23:11.1134505
CONVERT()
関数は、新しいデータ型、変換する文字列、および(オプションの)目的の形式の3つの引数を取ります。ただし、この関数は、日付と時刻のデータのフォーマット方法を指定する必要がある場合にのみ使用してください。パフォーマンスはCAST()
ほど良くないためです。 。