我想將計算列添加到SQL數據庫。計算列規範看起來像這樣SQL Server計算列修整
BusinessName +''+姓氏+''+名字
它工作正常。
通常情況下,BUSINESSNAME是空白的,所以我想修一修
TRIM(BUSINESSNAME + '' +姓氏+ '' +姓)
但是當我做我得到一個錯誤
我想將計算列添加到SQL數據庫。計算列規範看起來像這樣SQL Server計算列修整
BusinessName +''+姓氏+''+名字
它工作正常。
通常情況下,BUSINESSNAME是空白的,所以我想修一修
TRIM(BUSINESSNAME + '' +姓氏+ '' +姓)
但是當我做我得到一個錯誤
你可以使用下面的邏輯,
第一種選擇:檢查值爲空,由空字符串替換它,你將擁有領先的空空間,如果BUSINESSNAME是空
isnull(BusinessName, '') + ' ' + Surname + ' ' + FirstName
或
第二個選項:檢查是否BUSINESSNAME爲空或空,如果是不考慮。如果BusinessName爲空或空,則不會有空白空間
case when isnull(BusinessName, ' ') <> ' '
then BusinessName + ' ' + Surname + ' ' + FirstName
else Surname + ' ' + FirstName
end as FullName
我認爲這取決於列數據類型和約束。更一般的方法可以是以下。以此爲出發點,如果作爲一項規則姓氏和名字(例如)不可爲空並且不能爲空,可以省略一些功能:
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
我建議做如下:
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, ''
)
)
非常感謝您的答覆 –
沒有修剪(),而不是使用LTRIM()| rtrim() –
指定列數據類型 – etsa
@AlexK。有從2017年https://docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql –