Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ZipCode查询以提取五位数和九位数_Sql Server - Fatal编程技术网

Sql server ZipCode查询以提取五位数和九位数

Sql server ZipCode查询以提取五位数和九位数,sql-server,Sql Server,我试图在MSSQL中提取一个查询,以便从cus_地址表中提取9位zipcodes。我已经从我自己创建的一个名为dbo.WEST_PALM_ZIPS的表中提取了5位数的Zipcode。我需要拉我的WEST_PALM_zips表中的所有拉链以及客户地址。邮政编码(感谢任何帮助) 我想这就是你想要的——尽管如果我误解了什么/如果它没有如你所期望的那样起作用,请大声喊叫 SELECT DISTINCT [Member Id] = Cust.MASTER_CUSTOMER_ID ,[FirstName]

我试图在MSSQL中提取一个查询,以便从cus_地址表中提取9位zipcodes。我已经从我自己创建的一个名为dbo.WEST_PALM_ZIPS的表中提取了5位数的Zipcode。我需要拉我的WEST_PALM_zips表中的所有拉链以及客户地址。邮政编码(感谢任何帮助)


我想这就是你想要的——尽管如果我误解了什么/如果它没有如你所期望的那样起作用,请大声喊叫

SELECT DISTINCT [Member Id] = Cust.MASTER_CUSTOMER_ID
,[FirstName] = Cust.First_Name    
,[Lastname] = Cust.Last_Name
,[Email] = Cust.PRIMARY_EMAIL_ADDRESS
,[Zip Code] = addr.POSTAL_CODE
FROM ORDER_DETAIL OD

INNER JOIN CUSTOMER  Cust 
    ON  Cust.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and Cust.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and od.subsystem = 'MBR'

INNER JOIN CUS_ADDRESS  Addr    
    ON Addr.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID  
    and Addr.COUNTRY_descr = 'United States'
    --check for 5 digit or 9 digit zip codes
    and 
    (
        --check for 5 digit zip codes based on contents of table
        (
            LEN(Addr.POSTAL_CODE) = 5
            and Addr.POSTAL_CODE in 
            ( 
                select POSTAL_CODE 
                from [dbo].[WEST_PALM_ZIPS] wpz
                --if you want to be sure you only get the 5 digit codes from this table (though from your description I believe that's all this table contains?)
                --where LEN(POSTAL_CODE) = 5
                --and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]'
            )
        )
        or -- check that it's a 9 digit code
        (
            LEN(Addr.POSTAL_CODE) = 10
            and SUBSTRING(Addr.POSTAL_CODE,6,1) = '-'   
            and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'
        )
    )
INNER JOIN CUS_ADDRESS_DETAIL  AddrD 
    ON AddrD.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and AddrD.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and AddrD.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID 
    and AddrD.ADDRESS_TYPE_CODE = OD.SHIP_ADDRESS_TYPE_CODE   

有关上述示例中使用的类似语句/模式匹配的说明,请参见。

IF(LEN…,
Mid(
&“-”&
对于非美国读者来说,它看起来不像SQL Server。9位数的zip是10个字符-5位数,一个连字符,然后是4位数:我认为左边可能更容易接受,Thinks@Lamak?嗯,有太多东西在SQL Server上不起作用。你不能使用
if()
像那样,你需要使用一个
大小写
表达式。没有
Mid()
函数,
&
不用于连接字符串,
“-”
需要使用单引号而不是双引号,我甚至不明白
[0-9]是什么意思
正在运行,但它在SQL上肯定不起作用Server@JohnLBevan是的,一开始我不太明白这个问题,但现在我明白op的意思了,我把你的答案投了更高的票,这正是我需要的。谢谢!
SELECT DISTINCT [Member Id] = Cust.MASTER_CUSTOMER_ID
,[FirstName] = Cust.First_Name    
,[Lastname] = Cust.Last_Name
,[Email] = Cust.PRIMARY_EMAIL_ADDRESS
,[Zip Code] = addr.POSTAL_CODE
FROM ORDER_DETAIL OD

INNER JOIN CUSTOMER  Cust 
    ON  Cust.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and Cust.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and od.subsystem = 'MBR'

INNER JOIN CUS_ADDRESS  Addr    
    ON Addr.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID  
    and Addr.COUNTRY_descr = 'United States'
    --check for 5 digit or 9 digit zip codes
    and 
    (
        --check for 5 digit zip codes based on contents of table
        (
            LEN(Addr.POSTAL_CODE) = 5
            and Addr.POSTAL_CODE in 
            ( 
                select POSTAL_CODE 
                from [dbo].[WEST_PALM_ZIPS] wpz
                --if you want to be sure you only get the 5 digit codes from this table (though from your description I believe that's all this table contains?)
                --where LEN(POSTAL_CODE) = 5
                --and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]'
            )
        )
        or -- check that it's a 9 digit code
        (
            LEN(Addr.POSTAL_CODE) = 10
            and SUBSTRING(Addr.POSTAL_CODE,6,1) = '-'   
            and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'
        )
    )
INNER JOIN CUS_ADDRESS_DETAIL  AddrD 
    ON AddrD.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and AddrD.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and AddrD.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID 
    and AddrD.ADDRESS_TYPE_CODE = OD.SHIP_ADDRESS_TYPE_CODE