uns*_*138 5 sql-server-2005 sql-server string-manipulation
试图从这些数据中提取街道地址:
CREATE TABLE foo(Places varchar(50));
INSERT foo(Places) VALUES
('MARKET @123 NORTH RD'),
('HARDWARE @600 Main RD ;W1'),
('MAIN AV / NORTH RD'),
('500 NORTH RD @LIBRARY'),
('500 ANYSTREET ; *** SIDEWALK****'),
('MARKET @123 NORTH RD'),
('700 ANYSTREET'),
('(088.12345,088.12345) ;75 SOUTH RD');
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用 CASE、SUBSTRING 和 (CHAR/PAT)INDEX ......但我只是没有正确地做到这一点。
Select
[Address] = CASE WHEN PATINDEX('%@[0-9]%' , Places) = 0 THEN (SUBSTRING(Places, 0, CHARINDEX('@',Places)))
WHEN PATINDEX('%@[a-z]%' , Places) = 0 THEN (SUBSTRING(Places, CHARINDEX('@',Places) + 1, LEN(Places)))
WHEN PATINDEX('%;[0-9]%' , Places) = 0 THEN (SUBSTRING(Places, CHARINDEX(';',Places) + 1, LEN(Places)))
WHEN PATINDEX('[0-9]%' , Places) = 1 THEN (SUBSTRING(Places, 0, CHARINDEX(';',Places)))
WHEN PATINDEX('%/%' , Places) > 0 THEN Places END
From dbo.foo
Run Code Online (Sandbox Code Playgroud)
获取这些数据的更好方法是什么?我已经查看了用于查找电子邮件地址的字符串选择,但在处理 ';' 时似乎再次失败
蒂亚!
编辑所需的输出,表格包含:
123 NORTH RD
600 Main RD
MAIN AV / NORTH RD
500 NORTH RD
500 ANYSTREET
123 NORTH RD
700 ANYSTREET
7575 SOUTH RD
Run Code Online (Sandbox Code Playgroud)
尝试这个。
;With cte as
(
Select
places,
StartHere =
CASE
WHEN PATINDEX('%@[0-9]%', places) > 0 THEN PATINDEX('%@[0-9]%', places) + 1 -- @ plus number, start here
WHEN PATINDEX('%;[0-9]%', places) > 0 THEN PATINDEX('%;[0-9]%', places) + 1 -- ; plus number, start here
ELSE 0
END
,EndHere =
CASE
WHEN PATINDEX('%@[a-z]%', places) > 0 THEN PATINDEX('%@[a-z]%', places) -- @plus letter, stop here
WHEN PATINDEX('%@[0-9]%', places) > 0 AND PATINDEX('%;%', places) > 0 THEN PATINDEX('%;%', places) --@ plus number stop on semicolon if there
WHEN PATINDEX('%;[0-9]%', places) = 0 AND PATINDEX('%;%', places) > 0 THEN PATINDEX('%;%', places) --no semi plus number, so stop on semicolon if there
ELSE len(places) + 1
END
FROM
foo
)
SELECT
places,
StartHere
,EndHere
,SUBSTRING(places, StartHere, EndHere - StartHere)
FROM
cte
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2198 次 |
| 最近记录: |