2010-08-11 3 views
0

J'ai une colonne avec des données de nom et adresse dans une seule colonne:SQL Server Colonnes calculées - split en cas de rupture de ligne

Jo Bloggs 
Address Line 1 
Address Line 2 
PostCode 

Est-il possible alors de créer deux colonnes calculées sur cette base, et si oui, comment ? par exemple.

RecipientName

Jo Bloggs 

Adresse

Address Line 1 
Address Line 2 
PostCode 

J'utilise Vous pouvez le faire comme SQL Server 2005

+0

Cela dépend de la façon dont vous décidez de diviser les colonnes? Sur la base de quels critères décidez-vous des valeurs de nom et d'adresse? –

+0

Il s'agit de données existantes, qui peuvent provenir d'une autre base de données ou d'un fichier CSV importé. La première ligne est supposée être le nom. Le reste des lignes sont l'adresse – SamWM

Répondre

0

cela;

CREATE TABLE ... 
(
... 
WholeAddress VARCHAR(256), 
RecipientName AS dbo.fnGetAddressPart(1, WholeAddress), 
Address  AS dbo.fnGetAddressPart(2, WholeAddress) 
) 

Où le FDU est le long de;

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 

Toutefois, il serait préférable de répartir les éléments d'adresse dans des champs individuels.

Questions connexes