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

PARSE()を使用してSQLServerで文字列を日付/時刻に変換する方法

    SQL Serverを使用している場合は、CONVERT()の少なくとも1つを使用した可能性があります またはCAST() あるデータ型から別のデータ型に変換する関数。文字列を日付/時刻データ型に変換しようとしたときにエラーが発生したことがある場合は、PARSE() 機能はあなたが必要とするものかもしれません。

    たとえば、たとえば2018年7月20日金曜日のような文字列がある場合 、CONVERT() またはCAST() 関数はエラーをスローします。ただし、PARSE() 関数は問題なく処理します。

    PARSE() 関数は、SQLServerで要求されたデータ型に変換された式の結果を返します。したがって、これを使用して、文字列値を日付/時刻データ型( date など)に「変換」できます。 、日時 datetime2 など)。

    構文

    PARSE()の構文は次のとおりです 機能:

    PARSE ( string_value AS data_type [ USING culture ] )

    string_valueの場所 解析する値、data_type 解析するデータ型とculture 文字列を解析するときに使用する言語形式を指定するために使用できるオプションの引数です。

    基本的な例

    使用法を示す基本的な例を次に示します。

    SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
    AS 'Result';

    結果:

    +-----------------------------+
    | Result                      |
    |-----------------------------|
    | 2018-07-20 00:00:00.0000000 |
    +-----------------------------+
    

    時間部分を削除する

    前の例では、文字列を datetime2として解析するように指定しました データ・タイプ。このデータ型には、高精度の時間コンポーネントが含まれます。時間コンポーネントが必要ない場合は、いつでも日付として解析できます。 データ型。

    日付を指定した場合の結果は次のとおりです データ型:

    SELECT PARSE('Friday, 20 July 2018' AS date) 
    AS 'Result';

    結果:

    +------------+
    | Result     |
    |------------|
    | 2018-07-20 |
    +------------+
    

    時間の部分を維持しますが、精度は低くなります

    そして、あなたが 時間が必要ですが、精度が低い場合は、いつでも smalldatetimeを使用できます。 データ型:

    SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
    AS 'Result';

    結果:

    +---------------------+
    | Result              |
    |---------------------|
    | 2018-07-20 14:36:00 |
    +---------------------+
    

    ただし、それが十分に正確でない場合は、常に日時があります。 データ型:

    SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
    AS 'Result';

    結果:

    +-------------------------+
    | Result                  |
    |-------------------------|
    | 2018-07-20 14:35:50.523 |
    +-------------------------+
    

    日付入力のバリエーション

    PARSE() 関数は通常、要求されたデータ型の有効な表現として提供する限り、変換しようとしている日付を計算できます。さまざまなスタイルで提供されている日付の例を次に示します。

    SELECT 
        PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
        PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
        PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
        PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

    結果:

    +------------+------------+------------+------------+
    | Result 1   | Result 2   | Result 3   | Result 4   |
    |------------+------------+------------+------------|
    | 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
    +------------+------------+------------+------------+
    

    ただし、それは精神的なものではありません:

    SELECT PARSE('Next Friday' AS date) 
    AS 'Result';

    結果:

    Error converting string value 'Next Friday' into data type date using culture ''. 
    

    文化を追加する

    3番目の引数を追加して、文字列がフォーマットされるカルチャを指定できます。たとえば、日付が01/06/2018の場合 、これは2018年1月6日を意味する可能性があります または2018年6月1日 、使用している文化によって異なります。

    カルチャを指定する例は次のとおりです。

    SELECT 
        PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
        PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

    結果:

    +------------+------------+
    | en-US      | en-GB      |
    |------------+------------|
    | 2018-01-06 | 2018-06-01 |
    +------------+------------+
    

    この引数を指定しない場合は、現在のセッションの言語が使用されます。

    間違った平日を提供する

    PARSE() 関数は非常にスマートで、間違った平日を指定するとエラーが返されます。

    したがって、前の例と同じ日付を使用し、平日を金曜日から木曜日に変更すると、次のようになります。

    SELECT PARSE('Thursday, 20 July 2018' AS date) 
    AS 'Result';

    結果:

    Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.
    

    1. Oracleデータベースとは何ですか?

    2. Oracleシーケンスを既存の列の次の値にリセットする最良の方法は?

    3. PostgreSQLのスキーマを使用したHibernateおよびマルチテナントデータベース

    4. SQL Server(T-SQL)のパーティションテーブルの境界値を取得する