我在一列中有一个包含名称和地址数据的列:
Jo Bloggs
Address Line 1
Address Line 2
PostCode
是否有可能在此基础上创建两个计算列,如果是,如何? e.g。
RECIPIENTNAME
Jo Bloggs
地址
Address Line 1
Address Line 2
PostCode
我正在使用SQL Server 2005
答案 0 :(得分:0)
你可以这样做;
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
然而,最好将地址元素划分为单个字段。