2017-01-15 12 views
3

これは簡単な解決策ですが、なぜこの機能が動作しないのかわかりません。私がやりたいすべてがdate列にvarcharから変換することですSQL Serverでvarcharを日付に変換する

DateField 
---------- 
12/16/2016 
11/06/2016 

が、私はこのエラーを取得しています:私はこのようなデータを持つ列を持っている。ここ

Conversion failed when converting date and/or time from character string.

は私の簡単ですクエリ:

select convert (date, DateField) as convertedField 
from myTable 
+1

あなたが与えた2つの例は何も問題ありません。あなたのテーブルには日付に変換できない悪い日付があります。どのバージョンの 'SQL SERVER'を使用していますか? –

+0

私は2012を使用しています – moe

+0

http://www.w3schools.com/sql/func_convert.asp – Hadi

答えて

9

あなたが与えた2つの例は何も間違っていません。あなたのテーブルには日付に変換できない悪い日付があります。悪い日付の

使用TRY_CONVERT機能、それはあなたがDATE/DATETIMEデータ型の日付を常に格納する必要がありNULL

select TRY_Convert(date,DateField) 
From myTable 

を返します。

あなたが

select DateField 
From myTable 
Where TRY_Convert(date,DateField) IS NULL 
0

日付に変換できないレコードを表示したい場合は、フォーマット中に日付時刻の形式を指定する必要があります。あなたのテーブルの日付は現在USフォーマットであるので、3番目の引数101を変換関数に渡す必要があります。

SELECT CONVERT(date,[DateField],101) FROM myTable; 

ワーキングフィドルここで、日付時刻のスタイルについて、ここでhttp://rextester.com/NYKR49788

さらに詳しい情報:https://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

私はまさにあなたが提案したものの、同じエラーを受けています – moe

+0

はすべて同じ形式のdateField値であるか、 –

+0

日付のデフォルトの形式はmm-dd-yyyyです。あなたの形式はmm/dd/yyyy – enigma6205

3

mm/dd/yyyyのような特定の日付形式で作業する場合は、次の

よう Convert()機能でそれを指定することができます
CONVERT(DATETIME,DATAFIELD,101) 

まだ動作しない場合は、を使用してください :

SELECT * 
FROM TBL 
WHERE TRY_CONVERT(DATETIME, DATAFIELD, 101) IS NULL 

これは、変換がここに日時形式の詳細を読む

を失敗した場合

TRY_CONVERT()NULLを返します変換できない行を返します:0行はこの例外をスローしている取得しますSQL Server CONVERT() Function tutorial

読み取りTRY_CONVERT MSDN Article

+0

Convert()でいつスタイルを指定しなければなりませんか? – scsimon

+0

特定のフォーマットで作業している場合 – Hadi

+0

私はそれを変更しました:) – Hadi

関連する問題