sql >> データベース >  >> RDS >> Sqlserver

SQLServerで文字列から時間データを抽出または変換する方法

    問題:

    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()ほど良くないためです。 。


    1. 読み取り専用のOracleホーム

    2. PostgreSQL12のデータベース管理と監視

    3. 非主キーへの外部キー

    4. MySQLで毎日のアクティブユーザー(DAU)を計算する方法