2017-09-07 154 views
1

我想將計算列添加到SQL數據庫。計算列規範看起來像這樣SQL Server計算列修整

BusinessName +''+姓氏+''+名字
它工作正常。

通常情況下,BUSINESSNAME是空白的,所以我想修一修

TRIM(BUSINESSNAME + '' +姓氏+ '' +姓)

但是當我做我得到一個錯誤

+4

沒有修剪(),而不是使用LTRIM()| rtrim() –

+0

指定列數據類型 – etsa

+0

@AlexK。有從2017年https://docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql –

回答

2

你可以使用下面的邏輯,

第一種選擇:檢查值爲空,由空字符串替換它,你將擁有領先的空空間,如果BUSINESSNAME是空

isnull(BusinessName, '') + ' ' + Surname + ' ' + FirstName 

第二個選項:檢查是否BUSINESSNAME爲空或空,如果是不考慮。如果BusinessName爲空或空,則不會有空白空間

case when isnull(BusinessName, ' ') <> ' ' 
    then BusinessName + ' ' + Surname + ' ' + FirstName 
else Surname + ' ' + FirstName 
end as FullName 
+1

你的第二個解決方案是更優雅,因爲前者將在事件的領先空間該BusinessName是NULL /空白。好答案。 – Eli

+0

@Eli,謝謝,你是絕對正確的,我也會使用第二個選項。 – PawelCz

0

我認爲這取決於列數據類型和約束。更一般的方法可以是以下。以此爲出發點,如果作爲一項規則姓氏和名字(例如)不可爲空並且不能爲空,可以省略一些功能:

DECLARE @T AS TABLE (BUSIN_NAME VARCHAR(20), SURNAME VARCHAR(20), NAME VARCHAR(20)) 
INSERT INTO @T VALUES(NULL, NULL, NULL); 
INSERT INTO @T VALUES(NULL, 'A', NULL); 
INSERT INTO @T VALUES(NULL, 'B ', NULL); 
INSERT INTO @T VALUES('', 'Karl ', ' Smith'); 
INSERT INTO @T VALUES('Dr.', 'Karl ', ' Smith'); 
INSERT INTO @T VALUES('Dr. ', 'Joe ', ' Martin '); 

SELECT BUSIN_NAME, SURNAME, NAME 
    , LTRIM(RTRIM(LTRIM(RTRIM(ISNULL(BUSIN_NAME,'')))+ ' ' + LTRIM(RTRIM(ISNULL(SURNAME,'')))+' ' +LTRIM(RTRIM(ISNULL(NAME,''))))) DESCR 
    , DATALENGTH (LTRIM(RTRIM(LTRIM(RTRIM(ISNULL(BUSIN_NAME,'')))+ ' ' + LTRIM(RTRIM(ISNULL(SURNAME,'')))+' ' +LTRIM(RTRIM(ISNULL(NAME,'')))))) AS LENGTH 
    FROM @T 

輸出:

BUSIN_NAME SURNAME NAME DESCR    LENGTH 
NULL  NULL NULL      0 
NULL  A  NULL A     1 
NULL  B  NULL B     1 
      Karl  Smith Karl Smith   10 
Dr.   Karl  Smith Dr. Karl Smith  14 
Dr.   Joe  Martin  Dr. Joe Martin 14 
0

我建議做如下:

select stuff((coalesce(' ' + BusinessName, '') + 
       coalesce(' ' + Surname, '') + 
       coalesce(' ' + Firstname, '') 
      ), 1, 1, '') 

這些很容易推廣到更多的領域。您可以使用ltrim()而不是stuff(),因爲您將空格用作分隔符。 stuff()更通用,因爲它處理其他分隔符(特別是逗號)。

作爲計算列:

alter table t add newcol as 
    (stuff((coalesce(' ' + BusinessName, '') + 
      coalesce(' ' + Surname, '') + 
      coalesce(' ' + Firstname, '') 
      ), 1, 1, '' 
     ) 
    ) 
+0

非常感謝您的答覆 –