我想将计算列添加到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 –