1

adate varchar(8) が指定された 2 つの日付の間にあることを確認する必要がある場所を選択しています。

渡された値が NULL の場合があるため、すべてを表示します。

select something from myTable where
convert(date, adate) >= ISNULL(convert(date,@beginDate), convert(date, adate)) 

正常に動作します

しかし、私がそれを作るとき:

select something from myTable where
convert(date, adate) >= ISNULL(convert(date,@beginDate), convert(date, adate)) 
and convert(date, adate) <= ISNULL(convert(date,@endDate), convert(date, adate))

私は得る:

文字列から日時を変換する際に変換に失敗しました。

または、エラーなしで >= なしで <= 行を実行できますが、両方を一緒にすることはできません。何が起こっているのですか??

2行は同じように見えますが、ここで何が間違っているのかわかりません.....

4

3 に答える 3

1

@endDate の値を確認してください。そのパラメーターは、機能する SELECT と機能しない SELECT の唯一の違いです。おそらく、日付に変換できない値が含まれていることがあります。通常の容疑者は空の文字列 ( '')

于 2013-02-25T22:15:45.320 に答える
1

@startdate と @enddate はどちらも文字列型のようです。最善の方法は、それらを ISO 形式 (yyyymmdd) にすることです。問題はありません。

たとえば、これらを使用してみてください。

Select @startdate = '20130101', @enddate = '20130221'
于 2013-02-25T22:26:00.243 に答える
0

何をしようとしているのかはわかりませんが...値のいずれかがNULIFIEDになる可能性があるため、テーブル内のすべての結果を取得すると言いました...クエリを設定するだけの方が簡単かもしれませんDBの前に使用している言語でフィルタリングするには...

または、PHPサンプルを置くように...

    IF ( !$beginDate || !$endDate )
    {
        $query = "SELECT * FROM myTable";
    }
    ELSE
    {
        $query = "SELECT * FROM myTable WHERE 'whatever clause'";
    }
于 2013-02-25T22:03:30.013 に答える