0

日付を比較しようとしていますが、クエリで結果が返されません。クエリを正しく記述したかどうか知りたいですか?

SELECT *
FROM a, b               
WHERE
CONVERT(varchar(50),a.BirthDate, 101) between CONVERT(varchar(50),b.minage, 101) and CONVERT(varchar(50),b.maxage, 101)

この日付比較クエリに何か問題がありますか?

テーブル構造は次のとおりです。

Table a:
Column Name     Datatype
Birthdate       Date

Table b's row:
Column Name     Datatype
minage          Date - calculated as : select DATEADD(year, -41, GETDATE())
maxage          Date - calculated as : select DATEADD(year, -21, GETDATE())

表Bのマイネージでは、最大値の基準が行ごとに変わります。したがって、範囲は、minage 0 max age 20、minage 50 maxage 60などになります(範囲は重複しません)。

クエリで何が間違っている可能性があるかについてのアイデアはありますか?

時間や分ではなく、日付とのみ比較/計算する必要があります。

4

3 に答える 3

1

dateに変換しないでくださいstring。これを行うと、文字列および日付による無効な比較が発生する可能性があります。

... WHERE a.BirthDate between b.minage and b.maxage
于 2012-09-18T16:32:04.603 に答える
1

すべての変換を削除します(varcharへ)

SELECT *
FROM a, b               
WHERE
a.BirthDate between b.minage and b.maxage

Timeの一部を削除する必要があるDateTime場合は、次のことができます。CAST(a.BirthDate AS Date)

于 2012-09-18T16:32:36.133 に答える
-1

私の愚かかもしれません。

minageとmaxageの順序を逆にする必要があったようです。

したがって、以下のクエリは機能します。

SELECT *
FROM a、b
WHERE CONVERT(varchar(50)、a.BirthDate、101)between CONVERT(varchar(50)、b.maxage、101)and CONVERT(varchar(50)、b.minage、101)

于 2012-09-18T16:40:41.407 に答える