在此處輸入影像描述此代碼應回傳不含街道編號的街道地址。這些歐盟地址在地址末尾有他們的門牌號。我不確定為什么會發生錯誤。
UPDATE STAGING_1_1_FACT_CUSTOMERS_B2B_LGP
SET [StreetAddress] = SUBSTRING([Address], 1, PATINDEX('%[1-9]%', [Address])-1)
FROM [dbo].[STAGING_1_1_FACT_CUSTOMERS_B2B_LGP]
WHERE [Country Code] IN ('NL','DE','LT','AT','BE','ES','DK','IT', 'SE', 'CZ', 'SI', 'SUI', 'EE','PL','HU','LIE','FI','LV')
uj5u.com熱心網友回復:
識別地址中沒有數字的行:
SELECT * FROM dbo.STAGING_1_1_FACT_CUSTOMERS_B2B_LGP -- wow
WHERE PATINDEX('%[1-9]%', [Address]) = 0;
要在不出現數字時獲取整個地址,您可以使用:
SUBSTRING(Address, 1, COALESCE(NULLIF(
PATINDEX('%[1-9]%', [Address]), 0),LEN(Address) 1)-1)
其中 - 找不到數字 - 會將長度加 1,因此您仍然可以減去 1 來獲得整個字串。這是假設您在這種情況下想要整個字串。
為了執行更新,您仍然需要為您顯然擁有(或者您不會在這里)但您沒有包含在螢屏截圖中的垃圾資料做準備(也不要將資料作為螢屏截圖發布))。鑒于此示例資料:
CREATE TABLE dbo.STAGING_1_1_FACT_CUSTOMERS_B2B_LGP
(
Address nvarchar(255),
StreetNumber nvarchar(255),
StreetAddress nvarchar(255)
);
INSERT dbo.STAGING_1_1_FACT_CUSTOMERS_B2B_LGP(Address)
VALUES(N'Gewerbegebiet 5'),
(N'Sp?nnigweg 1'),
(N'Hauptstr 113A'),
(N'Viale Francesco Redi 39'),
(N'Garbage your code does not handle.'),
(N'More garbage 20th promenade 225 W');
您可以運行以下更新:
; /* <--- ensure previous statement terminated */
WITH src AS
(
SELECT *, FirstNumber =
COALESCE(NULLIF(PATINDEX('%[1-9]%', [Address]), 0),LEN(Address) 1)
FROM dbo.STAGING_1_1_FACT_CUSTOMERS_B2B_LGP
-- WHERE CountryCode IN ('some', 'list');
)
UPDATE src SET
StreetNumber = SUBSTRING(Address, FirstNumber, 255),
StreetAddress = LEFT(Address, FirstNumber-1);
輸出(顯示垃圾會發生什么):
地址 街牌號碼 街道地址 Gewerbegebiet 5 5 格沃貝格比 斯帕尼格韋格 1 1 斯潘尼格韋格 Hauptstr 113A 113A 豪普斯特 Viale Francesco Redi 39 39 Viale Francesco Redi 垃圾代碼無法處理。 垃圾代碼無法處理。 更多垃圾 20th promenade 225 W 第 20 長廊 225 W 更多垃圾
- 示例db<>fiddle
此外,您不需要FROM更新中的行。您正在更新同一張表。
最后,這個要求對我來說毫無意義。
- 為什么你想要
StreetAddress一切都達到但不包括數字? - 如果街道名稱中有數字會怎樣?
- 如果您正在嘗試清理地址資料,那么有非常昂貴的軟體可以做到這一點并且仍然不完美,因此嘗試重新發明輪子將導致許多像這樣的令人沮喪的小問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461153.html
