2017-05-30 60 views
1

これは、列タイプがDATEIMEの場合に使用されましたが、現在はDATEではありません。データ型の日付からbigintへの明示的な変換は許可されていません

CONVERT(BIGINT,ev.StartDate) * -1 

DATE列からBIGINT値を取得するためにとにかくはありますか?

+1

はなぜちょうど(、ev.StartDate、日の1900年/ 01/01 ') 'DateDiff関数を選択し'使用しないで、あなたは整数に日付を変換する場合....一緒 – scsimon

+1

をすべてを避けるため、 ) –

+0

'CAST(CAST( '2017-05-30 00:00:00.000' as datetime)AS decimal(8,2))'は '42883'を返します。 'CAST(CAST( '2017-05-30 12:00:00.000' AS datetime)as decimal(8,2))'は42883.50を返します。したがって、毎日は1900年から始まる単一の数字として表されます –

答えて

2

さらに別のオプションをBIGINTする必要があります。これはでもSQL Serverの日付は1900年に大きなint型から日によってカウントされます

Declare @YourTable table (StartDate date) 
Insert Into @YourTable values ('2017-05-30') 

Select DateDiff(DAY,StartDate,-1) 
From @YourTable 

戻り

-42884 
4

cast開始時刻をdatetimeとすることができます。

CONVERT(BIGINT,CAST(ev.StartDate as DATETIME)) * -1 
+0

'startDate'のデータ型は何ですか? –

0

あなたはvarchar型に変換してから

select Convert(bigint,convert(varchar(10),ev.StartDate,112))*(-1) 
2

まず、のための符号を反転します約21億円で有用になり始める。それは580万の範囲にある1年間に相当します。あなたは本当に大きな日付を持っていますか?

もちろん、intへのキャストは許可されていません。 datetimeの値をキャストできます。 。 。他の方法がありますか?

1つの簡単な方法は、次のとおりです。

select 1 + datediff(day, 0, datecol) 

値が実際の変換に一致するように、「+ 1」が必要とされています。 (代わりに "0"の代わりに "-1"を使用することができます)

または、Unixの時間を秒単位またはミリ秒単位で指定したい場合があります。そのために:

select datediff_big(ms, '1970-01-01', datecol) 
関連する問題