0

2009-11-25, 12:42AM IST「Post」という名前のテーブルに、「postingdate」というフィールドの値を形式の文字列として持っています。

日付範囲に基づいて詳細を取得するには、クエリが必要です。次のクエリを試しましたが、エラーがスローされます。この問題を解決する方法を教えてください。前もって感謝します。

select postingdate 
from post 
where TO_DATE(postingDate,'YYYY-MM-DD')>61689 
  and TO_DATE(postingDate,'YYYY-MM-DD')<61691
4

4 に答える 4

1

これまで見てきたように、日付を表す文字列列に対してあらゆる種類のクエリを実行しようとすると問題が発生します。いくつかのオプションがあります:

  1. Postingdate 列をある種の DATE または TIMESTAMP データ型に変換します。このフィールドを使用したテーブルのクエリがより高速で柔軟になり、エラーが発生しにくくなるため、これが最良の選択だと思います。

  2. 比較を行うときに、postingdate を文字列のままにして、関数を使用して日付に変換します。データベースが関数ベースのインデックスをサポートしていない限り、ほとんどのクエリは完全なテーブル スキャンに変わるため、これはパフォーマンスの問題になります。

  3. 投稿日を文字列のままにして、他の文字列と比較します。あなたが見つけたと思うように、この方法で範囲指定クエリを実行する方法を考え出すのは難しいため、良い選択ではありません。

私だったらデータ変換します。幸運を。

于 2010-01-21T12:12:57.443 に答える
0

SQLServerでは次のように言うことができます

  Select postingdate from post 
  where postingdate between '6/16/1969' and '6/16/1991'
于 2010-01-21T11:07:07.727 に答える
0

それが本当に文字列である場合、それがYYYY-MM-DD形式であることが幸運です。最も重要な数値は左側にあるため、その形式を文字列として並べ替えて比較できます。例えば:

select *
from Posts
where StringDateCol between '2010-01-01' and '2010-01-02'

文字列を日付に変換する必要はありません。この方法で比較しても、, 12:42AM IST付属物の影響を受けません。もちろん、テーブルに別のタイムゾーンの日付が含まれている場合を除きます:)

于 2010-01-21T11:16:28.900 に答える
0

日付範囲クエリを実行する前に、文字列を日付に変換する必要があります。時間部分に興味がない場合は、文字列を使用するだけで済む場合があります。

実際の機能は、RDBMS によって異なります。

for strings only
select * from posts
where LEFT(postingDate,10) > '2010-01-21'

or
for datetime ( Sybase example)
select * from posts
where convert(DateTime,postingDate) between '2010-01-21' and '2010-01-31'
于 2010-01-21T11:27:24.757 に答える