-2

わかりました、これは私が日付を文字列として保持している愚かなことです

23.12.2012 21:24:31

選択クエリで、それらを BigInt としてキャストして検索したい

casted version : "20121223212431"

以下のように

select * from myTable where cast(datestring as bigint) > 20111223212431 

そのような文字列をSQLサーバーでBigIntにキャストするにはどうすればよいですか?

編集 - このクエリが機能しない理由

    select (convert(datetime,LastMoveTime,104)) as myTime from myTable
where myTime < DATEADD(day,-366,GETDATE())

エラー: 列名 'myTime' が無効です。

4

2 に答える 2

5

まず、DATETIME代わりに使用するスキーマを修正するのが最善です。

それができない場合は、代わりにCONVERT式を使用して変換できますDATETIME。適切なフォーマットを見つけるだけです。(文字列値がまだサポートされている形式でない場合は、何らかの作業が必要になる場合があります...)結局のところ、それが値です- なぜ BigInt を使用するのでしょうか?

適切なデータ型を使用するようにスキーマを修正すると、あちこち変換するよりもはるかに効率的である可能性が高いことに注意してください。たとえば、文字列列のインデックスは、そのようなクエリにはあまり役に立ちませんが、インデックス付きの値に変更できればDATETIME、インデックスがほとんどの作業を行うことができます。

于 2012-12-24T15:08:18.023 に答える
1

John Skeet の投稿を参照してください。

declare @dt datetime
select @dt='20121223 21:24:31'

Select Cast(Convert(Varchar(25),@dt,112)+Replace(Convert(Varchar(25),@dt,108),':','') as BigInt)
于 2012-12-24T15:20:01.627 に答える