【问题标题】:How to use Mutiple between Caluse in Where Condition in SQL SERVER如何在 SQL SERVER 的 Where 条件中使用 Multiple between 子句
【发布时间】:2014-02-07 11:54:30
【问题描述】:

我想获取不同范围的数据,例如“SUBSCRIBER_ZIP between '30000' and '31999'” 和“SUBSCRIBER_ZIP between '39813' and '39901'”和“SUBSCRIBER_ZIP between '32000' and '34999'”。

我想获取所有具有此搜索条件的活动记录(意味着状态=1)。我为此使用了 Union,但它没有为我提供独特的记录:

Select distinct(SUBSCRIBER_EMAIL), SUBSCRIBER_Id FROM
 (select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '30000' and '31999'    
  Union    
 select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '39813' and '39901'    
  Union 
 select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '32000' and '34999'    
 ) x 

但它并没有为我提供独特的结果。请帮我看看我该怎么做。

【问题讨论】:

  • 你得到的重复值是什么? SUBSCRIBER_ZIP 是某种文本字段而不是数字字段吗?如果是这样,它将使用文本排序,这意味着"33" 将介于"32000""34999" 之间。虽然如果他们总是五个字符,我认为你会侥幸逃脱。
  • Subscriber_ZIP 是文本字段吗?
  • 是的.. @SirajMansour 这不是一个大问题问题是如何获得不同的记录..
  • raman:你得到了重复的记录,因为有些东西比你的 zip 检查更令人满意。我想不出这是如何临时发生的,这就是为什么我要求提供其中一个副本的示例以试图更好地理解。
  • 这是一个 XY 问题:修复查询没有用,因为问题出在表(或视图)SUBSCRIBER 中。请提供样本数据。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem

标签: asp.net sql sql-server sql-server-2008 unique


【解决方案1】:

为什么不使用OR

select distinct SUBSCRIBER_EMAIL, SUBSCRIBER_ID
from SUBSCRIBER
where SUBSCRIBER_ACTIVE = 1
and (
    SUBSCRIBER_ZIP between '30000' and '31999' or
    SUBSCRIBER_ZIP between '39813' and '39901' or
    SUBSCRIBER_ZIP between '32000' and '34999'
)

【讨论】:

  • 那么要么您的表包含重复项,要么SUBSCRIBER 是视图而不是表。无论哪种方式,查询都不应该受到指责。
  • 虽然我越看这个我意识到在开始的时候不同,结果集中应该不可能有重复......
【解决方案2】:
SELECT DISTINCT [SUBSCRIBER_EMAIL],[SUBSCRIBER_ID] FROM SUBSCRIBER WHERE ([SUBSCRIBER_ACTIVE] = 1) AND 
(
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 30000 AND 31999) 
OR
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 39813 AND 39901)
OR
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 32000 AND 34999)
)

注意:不要对数字使用引号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2017-12-04
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多