Как разделить строку адреса, номер дома и название улицы с помощью SQL? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь отделить номер дома и название улицы от адреса.

Я могу разделить большинство адресов, пока не доберусь до адреса, который содержит цифры и буквы как частьHouseNumber.

Я попробовал ниже, и это работает по большей части.Но он не работает для адреса, подобного 876A Mountain Breeze Rd. Я не могу отделить номер дома 876A от остальной части адреса.

Isих способ разделить 876A как [номер дома]?

SELECT
   C.CustomerID
   ,CASE
       WHEN ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', 
LTRIM(C.ServiceAddress)))) = 1 THEN
           LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', 
LTRIM(C.ServiceAddress)))
       ELSE
           NULL
   END AS [House Number]

 ,CASE
       WHEN ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', LTRIM(C.ServiceAddress)))) = 1 THEN
           LTRIM(RTRIM(SUBSTRING(
                                    LTRIM(C.ServiceAddress),
                                    CHARINDEX(' ', LTRIM(C.ServiceAddress)) + 1,
                                    LEN(LTRIM(C.ServiceAddress)))))
       ELSE
           LTRIM(RTRIM(C.ServiceAddress))
   END AS [Street Name]
 FROM dbo.Customers AS C

1 Ответ

1 голос
/ 03 апреля 2019

Можете ли вы попробовать это и посмотреть, дает ли это правильные результаты?

SELECT
C.CustomerID
,CASE
   WHEN ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', 
LTRIM(C.ServiceAddress)))) = 1 OR ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' 
', 
LTRIM(C.ServiceAddress)))) = 0 THEN
       LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', 
LTRIM(C.ServiceAddress)))
   ELSE
       NULL
END AS [House Number]

,CASE
   WHEN ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' ', 
LTRIM(C.ServiceAddress)))) = 1 OR ISNUMERIC(LEFT(LTRIM(C.ServiceAddress), CHARINDEX(' 
', LTRIM(C.ServiceAddress)))) = 0 THEN
       LTRIM(RTRIM(SUBSTRING(
                                LTRIM(C.ServiceAddress),
                                CHARINDEX(' ', LTRIM(C.ServiceAddress)) + 1,
                                LEN(LTRIM(C.ServiceAddress)))))
   ELSE
       LTRIM(RTRIM(C.ServiceAddress))
 END AS [Street Name]
FROM dbo.Customers AS C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...