0

許可された日付内のすべてのレコードが必要です。

SELECT
  page_id, page_published_date, page_expired 
FROM 
  pages
WHERE
  ([page_published_date] <= getdate() OR [page_published_date] is null)
  AND
  ([csp_expired] <= getdate() OR [page_expired] is null)

日付にはnull値が含まれる可能性があることに注意してください。

表の例:

page_id, page_published_date, page_expired
1        2012-10-05           null
2        null                 2012-10-01
3        2012-08-01           2012-11-30

この場合、正しいレコードは3になります。

4

2 に答える 2

0

唯一の結果として#3を選択したことに基づいて、編集された回答

SELECT
  page_id, page_published_date, page_expired 
FROM 
  pages
WHERE
  -- Publication date BEFORE today (current time)
  ([page_published_date] <= getdate() OR [page_published_date] is null)
  AND
  -- and page has not expired
  (datediff(d,0,getdate()) < [page_expired] OR [page_expired] is null)

件名からの直訳

SELECT
  page_id, page_published_date, page_expired 
FROM 
  pages
WHERE
  -- Publication date greater than today
  ([page_published_date] > DateDiff(D,0,getdate()) OR [page_published_date] is null)
  AND
  -- and [Publication date?] less than the expiration date
  ([page_published_date] < [page_expired] OR [page_expired] is null)

ノート:

  1. DateDiff(D,0,getdate())「今日」、つまり時間部分なしで表示されます
  2. 最初の条件で [page_published_date] よりも前の日付になるため、[page_expired] を今日と比較したくないと思います。
  3. 私の解釈が間違っている場合は、必要に応じて変更を差し込むために私の翻訳パターンを使用してください
于 2012-10-02T12:24:57.993 に答える
0
SELECT
  page_id, page_published_date, page_expired 
FROM pages
WHERE
(
    [page_published_date] >= getdate()
    OR [page_published_date] is null
)
AND (
    [page_expired] <= getdate()
    OR [page_expired] is null
)
于 2012-10-02T12:08:58.383 に答える