2

タイトルが示すように、sql between 句を使用すると、低から高までのアドレス範囲に対して実行され、2 つの範囲外の数値を入力して行が返されます。そして、その理由を知りたいです。

http://www.sqlfiddle.com/#!6/49467/2

クエリにすばやくヒットすると4929、アドレス範囲の最小値と最大値がそれぞれである行が返され、行が返され400ます498

クエリは次のとおりです。

SELECT 

ZipCodeLow ,
ZipCodeHigh ,
ZipExtensionLow ,
EndingEffectiveDate ,
BeginningEffectiveDate ,
AddressRangeLow ,
AddressRangeHigh ,
StreetName ,
City ,
ZipCode ,
Zip4,
Zip4High

FROM BoundTable

WHERE 

('68503' BETWEEN ZipCodeLow AND ZipCodeHigh) AND 
('4929' BETWEEN [AddressRangeLow] AND [AddressRangeHigh]) AND
([StreetName] = '32ND') AND
(GETDATE() BETWEEN [BeginningEffectiveDate] AND [EndingEffectiveDate])
4

1 に答える 1

2

最初に 4929 を数値に変換してから、クエリを実行します。

  SELECT 
  ZipCodeLow ,
  ZipCodeHigh ,
  ZipExtensionLow ,
  EndingEffectiveDate ,
  BeginningEffectiveDate ,
  AddressRangeLow ,
  AddressRangeHigh ,
  StreetName ,
  City ,
  ZipCode ,
  Zip4,
  Zip4High
  FROM BoundTable

  WHERE 
  ('68503' BETWEEN ZipCodeLow AND ZipCodeHigh) AND 
  (convert(numeric,'4929') BETWEEN [AddressRangeLow] AND [AddressRangeHigh]) AND
  ([StreetName] = '32ND') AND
  (GETDATE() BETWEEN [BeginningEffectiveDate] AND [EndingEffectiveDate])
于 2013-08-26T14:06:26.690 に答える