2

SQL2 クエリ言語を使用して日付を比較する方法を見つけるのに苦労しています。

私はこのようなことをできるようにしたい:

SELECT p.* FROM [nt:base] AS p WHERE EXTRACT(YEAR FROM p.[some_date]) = "2008"

出来ますか?これらの制約の王様のための最良のテクニックは何ですか?

ありがとうございました。

4

1 に答える 1

6

クエリで日付を使用する最良の方法CASTは、日付/時刻の文字列表現をJCRで使用されるDATE値に強制的に変換するために使用することです。

残念ながら、あなたの例では、特定の年内に発生する日付を探しています。JCRには年を整数として抽出する方法がないため、私が知っている唯一の標準的な方法は、実際の日付が年の最初と最後のマイクロ秒で定義された範囲内にあるかどうかを確認することです。

SELECT p.* FROM [nt:base] AS p
WHERE p.[some_date] >= CAST('2008-01-01T00:00:00.000Z' AS DATE)
  AND p.[some_date] <= CAST('2008-12-31T23:59:59.999Z' AS DATE)

もちろん、文字列リテラルではなく、長い表現(エポックを過ぎたミリ秒数)を使用できます。

ある種の「年」プロパティがある場合、これははるかに簡単になります。

SELECT p.* FROM [nt:base] AS p
WHERE p.[some_year] = 2008

文字列リテラルを使用して、キャストをLONGに強制することもできます。

SELECT p.* FROM [nt:base] AS p
WHERE p.[some_year] = CAST('2008' AS LONG)

some_yearプロパティがプロパティ定義でLONGとして定義されている場合、一部の実装ではこれを検出し、計画中に自動変換する場合があります。

于 2013-02-27T17:11:25.630 に答える