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

日時の挿入中に文字列から日付や時刻を変換すると変換に失敗しました

    SQLServerでサポートされている形式は多数あります。CASTおよびCONVERTに関するMSDNBooksOnlineを参照してください。これらの形式のほとんどは依存です 使用している設定(したがって、これらの設定が機能する場合と機能しない場合があります)について説明します。

    これを解決する方法は、(わずかに適合した)ISO-8601日付形式を使用することです。 これはSQLServerでサポートされています-この形式は常に機能します -SQLServerの言語と日付形式の設定に関係なく。

    SQL ServerでサポートされているISO-8601形式には、次の2つの種類があります。

    • YYYYMMDD 日付のみ(時間部分なし)。ここに注意してください:ダッシュはありません! 、それは非常に重要です! YYYY-MM-DD ない SQL Serverの日付形式の設定とは無関係であり、しない すべての状況で機能します!

    または:

    • YYYY-MM-DDTHH:MM:SS 日付と時刻について-ここに注意してください:この形式は持っています ダッシュ(ただし、できます 省略)、および固定のT DATETIMEの日付と時刻の部分の間の区切り文字として 。

    これはSQLServer2000以降で有効です。

    したがって、特定のケースでは、次の文字列を使用してください:

    insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
    

    そしてあなたは元気であるはずです(注:あなたは国際的な24時間を使う必要があります このための12時間AM/PM形式ではなく形式)。

    または :SQLServerを使用している場合2008 以上の場合、DATETIME2を使用することもできます データ型(プレーンなDATETIMEの代わりに )と現在のINSERT 問題なく動作します! :-) DATETIME2 変換の方がはるかに優れており、変換の煩わしさが大幅に軽減されます。いずれにせよ、SQLServer2008以降の推奨される日付/時刻データ型です。

    SELECT
       CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
       CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  
    

    このトピック全体が非常にトリッキーでやや混乱している理由を私に聞かないでください-それはまさにその通りです。ただし、YYYYMMDD 形式であれば、SQL Serverのすべてのバージョン、およびSQLServerの言語と日付形式の設定に問題はありません。



    1. MicrosoftAccessランタイムを使用する際の落とし穴

    2. ADDDATE()の例– MySQL

    3. group_concatとsqliteで行番号を使用する方法

    4. MariaDBの日付から年を返す4つの関数