我正在尝试将计算列添加到SQL数据库中。计算列规范如下所示
BusinessName +''+ Surname +''+ FirstName
哪个工作正常。
BusinessName通常是空白的,所以我想修剪它
修剪(BusinessName +''+ Surname +''+ FirstName)
但是当我这样做时,我收到错误
答案 0 :(得分:2)
您可以使用以下逻辑,
第一个选项:检查value是否为null,将其替换为空字符串,如果BusinessName为null,则将有前导空格
isnull(BusinessName, '') + ' ' + Surname + ' ' + FirstName
或
第二个选项:检查BusinessName是否为空或为空,如果是,则不考虑。如果BusinessName为null或为空
,则不会有前导空格case when isnull(BusinessName, ' ') <> ' '
then BusinessName + ' ' + Surname + ' ' + FirstName
else Surname + ' ' + FirstName
end as FullName
答案 1 :(得分:0)
我认为这取决于列数据类型和约束。更一般的方法可能如下。从此开始,如果通常SURNAME和NAME(例如)不是NULLABLE且不能为空,则可以省略一些功能:
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
答案 2 :(得分: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, ''
)
)