2017-01-18 44 views
0

日付の値を含むレコードを挿入する必要があります。私は、クエリをしようとするとフォーマットは、それが挿入され得る方法を、私はそれをフォーマットしない私は、文字列日付の値をyyyy-mm-dd hh:mm:ssをSQL Serverに挿入

から日付/時刻を変換する際に

変換が失敗したエラーを取得する'2006-07-26 00:00:00.000'.のですか?

INSERT [dbo].[NAMES] (
    [NAME_CODE] 
    ,[NAME_ID] 
    ,[NAME_CODE_ID] 
    ,[PREVIOUS_ID] 
    ,[GOVERNMENT_ID] 
    ,[PREV_GOV_ID] 
    ,[PREFIX] 
    ,[FIRST_NAME] 
    ,[MIDDLE_NAME] 
    ,[LAST_NAME] 
    ,[SUFFIX] 
    ,[NICKNAME] 
    ,[PREFERRED_ADD] 
    ,[BIRTH_DATE] 
    ,[BIRTH_CITY] 
    ,[BIRTH_STATE] 
    ,[BIRTH_ZIP_CODE] 
    ,[BIRTH_COUNTRY] 
    ,[BIRTH_COUNTY] 
    ,[DECEASED_DATE] 
    ,[DECEASED_FLAG] 
    ,[RELEASE_INFO] 
    ,[CREATE_DATE] 
    ,[CREATE_TIME] 
    ,[CREATE_OPID] 
    ,[CREATE_TERMINAL] 
    ,[REVISION_DATE] 
    ,[REVISION_TIME] 
    ,[REVISION_OPID] 
    ,[REVISION_TERMINAL] 
    ,[ABT_JOIN] 
    ,[TAX_ID] 
    ,[PersonId] 
    ,[PrimaryPhoneId] 
    ,[Last_Name_Prefix] 
    ,[LegalName] 
    ) 
VALUES (
    N'P' 
    ,2 
    ,N'P000000002' 
    ,N'NULL' 
    ,363768306 
    ,N'NULL' 
    ,N'Dr.' 
    ,N'Pever' 
    ,N'G' 
    ,N'Giper' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'PERM' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ,N'N' 
    ,N'NULL' 
    ,N'2006-07-26 00:00:00.000' 
    ,N'1900-01-01 08:39:02.000' 
    ,N'SCT' 
    ,1 
    ,N'2014-06-27 00:00:00.000' 
    ,N'1900-01-01 15:39:44.617' 
    ,N'SSTULTS' 
    ,1 
    ,N'*' 
    ,N'NULL' 
    ,1 
    ,N'NULL' 
    ,N'NULL' 
    ,N'NULL' 
    ) GO 
+3

これまで、可能な場合DATETIMEデータ型を段階的に廃止を起動しようとすべきです。また、nvarcharデータを扱う場合は先頭のNだけが必要です。あなたのNULLをactuall NULLにすると、問題は消えるでしょう。 –

+0

Create_Date、Create_Time、Revision_Date、およびRevision_Timeの各列のデータ型は?また、Birth_DateフィールドはNULL可能ですか? –

+0

タイプはdatetimeです。実際のnullに変更して挿入しました。 – ERPISE

答えて

3

BIRTH_DATEDECEASED_DATEが日付フィールドである場合、あなたは文字列NULLの代わりにNULL値代入しているので、それらは失敗します(まあ、ない技術的にnull値を、しかし、あなたは私が何を意味するか知っています)。他のNULL文字列もまた本当に悪い考えです。ヌルが必要な場合は、NULLという値の文字列ではなく、それを使用してください。

2

SQL Serverでは多くの形式がサポートされています。MSDN Books Online on CAST and CONVERTを参照してください。これらのフォーマットのほとんどはに従っていますが、設定によってはになります。したがって、これらの設定は何度か動作することがあります。これは、文字列リテラルを日付値に変換しようとするときに特に当てはまります。

これを解決する方法は、SQL Serverでサポートされている(やや適応)ISO-8601の日付形式を使用することです - この形式は常にに動作します - に関係なく、SQL Serverの言語とDATEFORMATの設定。

ISO-8601 formatは、SQL Serverがサポートされては、2つの種類があります:

  • YYYYMMDDちょうど日付(時間がない部分)のために、ここに注意してください:ダッシュはありません!、これは非常に重要です! YYYY-MM-DDで、はSQL Serverの日付形式設定とは独立しており、はありませんはすべての状況で機能します!

か:日付と時刻の

  • YYYY-MM-DDTHH:MM:SS - ここで注意:このフォーマットダッシュを持っている(しかし、彼らは省略することができる)、および日付と時刻の間の区切り文字として固定TDATETIMEの部分です

これはSQL Server 2000以降で有効です。

あなたはSQL Server 2008またはそれ以降とDATEデータ型(のみDATE! - ないDATETIME)を使用する場合は、お使いのSQL Server内の任意の設定で、あまりにも、あなたが実際にもYYYY-MM-DD形式を使用することができ、それが動作します。

なぜこの全体の話題がとてもトリッキーで、やや混乱しているのか聞かないでください。しかし、YYYYMMDD形式では、SQL Serverの任意のバージョン、およびSQL Serverの言語と日付形式の設定に問題はありません。

SQL Server 2008以降の推奨事項は、日付部分のみが必要な場合はDATE、日付と時刻の両方が必要な場合はDATETIME2(n)を使用することをお勧めします。あなたは、私はあなたには、いくつかの列にNULLを挿入したいことを推測していますが、あなたはdatetime型に変換できない文字列リテラル「NULL」を挿入しようとしている

関連する問題