2016-04-07 10 views
0

nvarchar(max)として格納されているSQL日付フィールドがあります。datetimeとして格納されたnvarcharをintに変換しようとしています

例:私はintにこれを変換する必要が4/7/2016 12:50:03 AM

私はこれを持っている:cast(convert(char(8), DateField,112) as int)

が、私はデータ型intにvarchar型の値が '5/22/201' を変換するとき

変換が失敗し、エラーメッセージが出てい

明らかに、/intではありません。助言がありますか??

+2

は、なぜあなたはNVARCHAR 'として日付を格納しています(MAX) '?データを適切なデータ型として保存してください...これはデータを格納するだけの膨大なオーバーヘッドではありませんが、データを照会しようとすると多くの複雑さが生じます。それが言われています...あなたは、これの「INT」表現が正確に何になると思いますか? – Siyual

+0

@Siyual: 'CONVERT(INT、getdate())'は1900-01-01以降の日数を返します。 –

+0

@ RossPresserはい、それはOPが日付の彼の 'INT'表現をそのようにしたいと言っているわけではありません。彼は「20160407」または「472016」またはEPOCH時間、または最後のスターウォーズ映画からの分数を望むことができます。それは完全に定義されていません... – Siyual

答えて

1

私はあなたがこれまでにvarchar型をキャストした場合、それは キャストを働くと考えている(intとして(CHAR(8)、キャスト(日時などのDateField)、112)に変換)

+0

これはまさに私が必要としたことでした。ありがとうございました!! – bteague

0

あなたは空白でスラッシュをreplaceことができます。

CAST(REPLACE(CONVERT(char(8),DateField,112),'/','') as int) 
0

まず、あなたがINTにそれを変換し、DATETIMEに変換する必要があります。そして、特定の長さの日付部分にはカウントしないでください - 月と日に応じて、8〜10文字の長さにすることができます。

DECLARE @T TABLE (datefield VARCHAR(MAX)) 
INSERT @T VALUES ('4/7/2016 12:50:03 AM') 
SELECT CAST(CONVERT(DATETIME, DateField) AS INT) FROM @T 
0

は、私はあなたが変換のチェーンが必要だと思う:文字列 - >日時 - >列 - > int型

cast(convert(char(8), convert(datetime, DateField, 101), 112) as int) 

あなたは、チェーンに沿って暗黙的変換に頼ることができるかもしれませんが、私は明白であることを好む。

関連する問題