2010-08-11 56 views
0

我有一列有姓名和地址數據的列:SQL服務器計算列 - 分裂的換行符

Jo Bloggs 
Address Line 1 
Address Line 2 
PostCode 

是否有可能再在此基礎上創建兩個計算列,如果又如何?例如

RECIPIENTNAME

Jo Bloggs 

地址

Address Line 1 
Address Line 2 
PostCode 

我使用SQL Server 2005

+0

取決於你決定如何決定分割列?根據您決定的名稱和地址值是什麼標準? – 2010-08-11 10:07:06

+0

它是現有數據,可能來自其他數據庫或來自導入的CSV。第一行被認爲是名字。其餘的行是地址 – SamWM 2010-09-10 10:16:04

回答

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 

但是,最好將地址元素分解爲單個字段。