0

この条件を使用して、今年作成された注文を取得しようとしています。

WHERE ORDER_DATE BETWEEN YEAR(GETDATE()) AND GETDATE()

しかし、2013 年より前の値を持つ結果がまだ得られますorder_date。フィールドの型は datetime 形式で、varchar だと思いました。

2013-01-01YEAR(GETDATE()) の代わりに行うと、それに応じて機能します。

4

6 に答える 6

2

これが私の2セントです

Select * from Order1 where ORDER_DATE between DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) and GETDATE()
于 2013-07-25T11:52:06.790 に答える
1

SQL Server 2012 では、DATEFROMPARTSまたはDATETIMEFROMPARTS関数を使用して、その部分から日付を作成できます。あなたは次のWHEREように書くことができます:

where order_date >=DATEFROMPARTS(YEAR(GETDATE()),1,1)

これにより、変換が回避され、クエリ オプティマイザーが ORDER_DATE を含む既存のインデックスを使用できるようになります。

于 2013-07-25T11:43:46.570 に答える
1

今年の1月1日を作成します-次のようになります:

where order_date >= convert( datetime, 
                      convert( varchar(4), getdate() ,120 ) + '-01-01',
                      120
                    )

またはPanagiotis Kanavosのように使用することを好む場合year(getdate())

where order_date >= convert( datetime, 
                      convert( varchar(4), year(getdate()) ) + '-01-01',
                      120
                    )

複数の場所で使用している場合は、それを関数にします

または (SQL サーバー 2012)

where order_date >= DATEFROMPARTS ( year(getdate()), 1, 1 )
于 2013-07-25T11:34:11.760 に答える
1

なぜだめですか

WHERE YEAR(ORDER_DATE) = YEAR(GETDATE())

ラージ

于 2013-07-25T11:28:44.837 に答える
1

GETDATE() が 1/07/2013 を返すとします。

これ...

WHERE ORDER_DATE BETWEEN YEAR(GETDATE()) AND GETDATE()

このように見えるでしょう...

WHERE ORDER_DATE BETWEEN '1905-07-07 00:00:00.000' AND '2013-07-01 00:00:00.000'

これは、YEAR(GETDATE()) から返される値 2013 が、datetime にキャストされたときに 1905 年 7 月 7 日を表すためです。

于 2013-07-25T11:28:58.877 に答える
-1

これを試して、

WHERE ORDER_DATE BETWEEN YEAR(ORDER_DATE) AND YEAR(GETDATE())
于 2013-07-25T11:30:21.327 に答える