你可以不喜歡這樣;
CREATE TABLE ...
(
...
WholeAddress VARCHAR(256),
RecipientName AS dbo.fnGetAddressPart(1, WholeAddress),
Address AS dbo.fnGetAddressPart(2, WholeAddress)
)
其中UDF是沿着線的;
CREATE FUNCTION fnGetAddressPart (@PARTID TINYINT, @DATA VARCHAR(256)) RETURNS VARCHAR(256) AS BEGIN
DECLARE @POS INT SET @POS = CHARINDEX(CHAR(13) + CHAR(10), @DATA, 1)
IF (@POS = 0 OR LEN(@DATA) <= 2) --no new lines or just \r\n
RETURN CASE @PARTID
WHEN 1 THEN @DATA --return name only
ELSE '' --no address part
END
RETURN CASE @PARTID
WHEN 1 THEN LEFT(@DATA, @POS - 2)
ELSE RIGHT(@DATA, LEN(@DATA) - @POS - 1)
END
END
但是,最好將地址元素分解爲單個字段。
取決於你決定如何決定分割列?根據您決定的名稱和地址值是什麼標準? – 2010-08-11 10:07:06
它是現有數據,可能來自其他數據庫或來自導入的CSV。第一行被認爲是名字。其餘的行是地址 – SamWM 2010-09-10 10:16:04