SQL Server计算列 - 在换行符时拆分

时间:2010-08-11 10:03:12

标签: sql-server sql-server-2005

我在一列中有一个包含名称和地址数据的列:

Jo Bloggs
Address Line 1
Address Line 2
PostCode

是否有可能在此基础上创建两个计算列,如果是,如何? e.g。

RECIPIENTNAME

Jo Bloggs

地址

Address Line 1
Address Line 2
PostCode

我正在使用SQL Server 2005

1 个答案:

答案 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

然而,最好将地址元素划分为单个字段。