0

別のシステムからデータをインポートしていますが、日時は次の形式の文字列として保存されます。

20061105084755ES

yyyymmddhhmmss(es/ed)esEST で、edは EDT です。

このテーブルを過去 30 日間クエリする必要があります。私は変換クエリを使用しています:

select convert(
    datetime,
    left(cdts, 4)+'-'+substring(cdts, 5,2)+'-'substring(cdts, 7,2)+' '+substring(cdts, 9,2) +':'+substring(cdts, 11,2)+':'+substring(cdts, 13,2)
as dt
from tb1
where dt < getdate()-30

かかる時間を短縮する、より効率的なクエリを探しています。このテーブルには約 9,000 万件のレコードがあり、クエリは永久に実行されます。

4

3 に答える 3

1

考えられるオプションの 1 つは、テーブルに日付列を追加し、ロード時にその情報を入力することです。このようにして、クエリを実行する前に変換がすべて完了します。

次に、実際のクエリで利用できるフィールドにインデックスがあることを確認してください。

于 2013-08-23T17:36:54.047 に答える
0
convert(datetime,stuff(stuff(stuff(datevalue, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'))

また

    Convert(time,Dateadd(SECOND,
        Right(DateValue,2)/1,
        Dateadd(MINUTE,
                Right(DateValue,4)/100,
                Dateadd(hour,
                        Right(DateValue,6)/10000,
                        '1900-01-01')))) +
convert(datetime,LEFT(datevalue,8))

リンク

于 2013-08-23T17:39:08.053 に答える