2017-07-05 17 views
0

SQL Server Mgmt Studioを使用しています。日付/時刻フィールドの月と日、LAW_TAEEMASTER.MASTR_ENTRYが現在の月と日よりも小さいか等しい場合にレコードを選択する式を作成する必要があります。たとえば、LAW_TAEEMASTER.MASTR_ENTRY = 8/20/2015および現在の日付= 2011年7月6日の場合は除外します。 LAW_TAEEMASTER.MASTR_ENTRY = 2014年12月21日、現在の日付= 2015年1月15日の場合は、を含めます。日付の書式設定は私の弱点です。ここで私が試したものです:月と日が現在の日付よりも小さい場合にレコードを選択します。

select LAW_TAEEMASTER.MASTR_ENTRY 
    from LAW_TAEEMASTER 
    WHERE day(LAW_TAEEMASTER.MASTR_ENTRY) <= DAY(GETDATE()) and MONTH(LAW_TAEEMASTER.MASTR_ENTRY) <= MONTH(getdate()) 

select LAW_TAEEMASTER.MASTR_ENTRY 
     from LAW_TAEEMASTER 
     WHERE AND DATEPART(DAY,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(DAY,GETDATE()) AND DATEPART(MONTH,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(MONTH,GETDATE()) 

をが、これらは単に個別に月と日を評価し、数など、より大きいまたは小さいので、それはレコードを除いています。 SQLでこれらを日付の一部として認識させ、年を無視するにはどうすればよいですか?

答えて

0

ロジックとコードを説明してください。 CONVERT(varchar(5),<your_date> ,110))を使用してください。は、米国標準時を意味し、mm-dd-yyyyのような出力を持っています。それから私たちは、日付の月と日である最初の5文字を​​取るだけです。 MM-DD-YYYY が読ん=

よりおよそcast and convert here私のサンプル表:私はこのクエリを実行すると

MASTER_ENTRY 
2017-08-30 
2017-07-05 
2017-07-04 

SELECT LAW_TAEEMASTER.MASTR_ENTRY 
FROM LAW_TAEEMASTER 
WHERE CONVERT(varchar(5),LAW_TAEEMASTER.MASTR_ENTRY ,110) <= CONVERT(varchar(5),GETDATE() ,110) 

結果:月と日と同じかそれ以前の現在の月と日

MASTER_ENTRY 
2017-07-05 
2017-07-04 

私はこのことができますし、StackOverflowのに歓迎したいと考えています。この回答が見つかった場合や、他の回答が問題を解決した場合は、それを解決策としてマークしてください。これは、将来同じ問題に遭遇するコミュニティや仲間のプログラマーに役立ちます。ありがとう。

-1

このトリックは、通常、テーブルにCCYYMMDD形式のようなデータを格納することです。次に、通常の比較演算子と日付を比較することができます。したがって、2017年7月5日には20170705となります。多くの場合、ISO Date formats 1st Jan 1970のようなものからミリ秒のような形式があります。 タイムゾーンが有効になると状況がさらに複雑になります(UTC)。 シンプルなCCYYMMDD形式を使用する場合は、単純に10000で除算し、残りの部分を比較に使用するとMMDDの比較が可能になります。

+0

日付の場合は日付として保存します。それ以外の場合は、最も基本的なカレンダー演算もできません。 20160301と20160229の間の日数は間違いなく72ではありません。 – fhossfel

+0

私はそれを日付として保存しないと言いましたか?あなたの否定的なことをしないでください@ fhossfel。オペアンプはMMDDの比較をするように求めました。データがどのように格納されているかを考えれば、どのように比較するのが容易になるかを視覚化できます。これらの形式のいずれかを使用すると、直接比較を行うことができ、MM-DD-YYなどの点では考えられません。 https://www.w3schools.com/sql/sql_dates.asp – JGFMK

+0

また、私は日付のdiffのための算術演算を行う私またはopイベントの言及でした! – JGFMK

0

私はmonth()day()を使用してこの操作を行います。

where month(LAW_TAEEMASTER.MASTR_ENTRY) * 100 + day(LAW_TAEEMASTER.MASTR_ENTRY) < month(getdate()) * 100 + day(getdate()) 

パフォーマンスが問題であるならば、私はインデックス付き計算列をお勧めします。

関連する問題