【解決方法】SQLサーバーで今日の日付から過去30日間のデータを取得する方法


過去 30 から今日までのすべての行の記録を取得する必要があります。 私はこれを試しましたが、うまくいきません

私が試したこと:

date_time >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) および date_time <= CONVERT(varchar(100), getdate(),103) である dsr_data から date_time を選択します。

解決策 3

SELECT date_time  FROM dsr_data
    WHERE date_time
               between DATEADD(DAY,-30,GETDATE()) and  GETDATE(); 

解決策 1

なぜCONVERTを使用しているのですか?
考えられる唯一の理由は、機能しないのと同じ理由です。日付を DATE、DATETIME、または DATETIME2 ではなく NVARCHAR 列として保存しています。

文字列を比較する場合、比較は完全に 2 つの文字列の最初の異なる文字に基づいて行われます。日付を 103 形式 (「dd/MM/yyyy」) でフォーマットすることを明確に選択しているため、比較は完全にジャンクになります -たとえば、年は最後にチェックされます。したがって、比較は月の最初の桁に基づいており、’0′ は ‘1’ より小さいため、2017 年 1 月 31 日は 1952 年 12 月 31 日より前になります。

データベースを変更します。 常に適切なデータ型でデータを格納してください。つまり、整数値を INT 列に、日付情報を DATE、DATETIME、または DATETIME2 列に格納するなどです。 そうしないと、これはあなたを苦しめるのを待っている多くの厄介な、厄介な問題の最初の 1 つにすぎません…

解決策 2

以下のクエリを使用します。

SELECT date_time  FROM  dsr_data
WHERE date_time  >= DATEADD(day,-30, getdate()) 
and   date_time  <= getdate()

解決策 4

これは私にとってはうまくいきます。

テーブル (dsr_data) -> 名前 (date_time) -> タイプ (datetime) -> デフォルト (CURRENT_TIMESTAMP)

SELECT date_time  FROM  dsr_data
WHERE date_time  >= DATE(adddate(curdate(), interval -30 day))
and   date_time  <= DATE(curdate())

コメント

タイトルとURLをコピーしました