SQL 字符串拼接,只在列不为空时用','分隔
SQL string concatenation, separated by ',' only when column is not null
我想在我的数据库中更新字符串 (varchar
) 列。我想连接 ',' + 值。
这是可行的,但如果数据库列中的值为空,我不想添加“,”(逗号)。
开头没有逗号。
UPDATE ImportState
SET ClientValidationRemark = ClientValidationRemark + ',' + @ClientValidationRemark
WHERE Id=@ImportId
当然,如果值不为空,我想每次都添加逗号。你知道任何简单、干净的方法来做到这一点吗?我总是更新一行,@ImportId
是主键。
这是一个未经测试的样本
UPDATE ImportState
SET ClientValidationRemark =
CASE ClientValidationRemark WHEN Null THEN @ClientValidationRemark
WHEN '' THEN @ClientValidationRemark
ELSE ClientValidationRemark + ',' + @ClientValidationRemark
END
WHERE Id=@ImportId
好吧,首先让我说,将分隔字符串保留在单个列中是一种糟糕的数据库设计,只有一个例外:当数据从未在 sql 中使用并且需要作为分隔字符串时在应用程序中。在超过 16 年的编程生涯中,我只存储过一次这样的值,而且正是这种情况。
但是,如果您选择存储分隔值,这里有一些简单的操作:
UPDATE ImportState
SET ClientValidationRemark = ISNULL(NULLIF(ClientValidationRemark, '') + ',', '') +
@ClientValidationRemark
WHERE Id=@ImportId
利用将字符串连接到空值将导致空值的事实(注意:仅当您使用 string concatenation operator (+
), Not when you use the built in function concat
时),我使用 NULLIF
将空字符串值转换为ClientValidationRemark
为 null,然后 ISNULL
将 null + ', '
转换回空字符串。
试试这个:
您可以使用 COALESCE
.
UPDATE ImportState
SET
ClientValidationRemark =
COALESCE(ClientValidationRemark + COALESCE(',' + @ClientValidationRemark,''),
@ClientValidationRemark)
WHERE Id=@ImportId
我想在我的数据库中更新字符串 (varchar
) 列。我想连接 ',' + 值。
这是可行的,但如果数据库列中的值为空,我不想添加“,”(逗号)。
开头没有逗号。
UPDATE ImportState
SET ClientValidationRemark = ClientValidationRemark + ',' + @ClientValidationRemark
WHERE Id=@ImportId
当然,如果值不为空,我想每次都添加逗号。你知道任何简单、干净的方法来做到这一点吗?我总是更新一行,@ImportId
是主键。
这是一个未经测试的样本
UPDATE ImportState
SET ClientValidationRemark =
CASE ClientValidationRemark WHEN Null THEN @ClientValidationRemark
WHEN '' THEN @ClientValidationRemark
ELSE ClientValidationRemark + ',' + @ClientValidationRemark
END
WHERE Id=@ImportId
好吧,首先让我说,将分隔字符串保留在单个列中是一种糟糕的数据库设计,只有一个例外:当数据从未在 sql 中使用并且需要作为分隔字符串时在应用程序中。在超过 16 年的编程生涯中,我只存储过一次这样的值,而且正是这种情况。
但是,如果您选择存储分隔值,这里有一些简单的操作:
UPDATE ImportState
SET ClientValidationRemark = ISNULL(NULLIF(ClientValidationRemark, '') + ',', '') +
@ClientValidationRemark
WHERE Id=@ImportId
利用将字符串连接到空值将导致空值的事实(注意:仅当您使用 string concatenation operator (+
), Not when you use the built in function concat
时),我使用 NULLIF
将空字符串值转换为ClientValidationRemark
为 null,然后 ISNULL
将 null + ', '
转换回空字符串。
试试这个:
您可以使用 COALESCE
.
UPDATE ImportState
SET
ClientValidationRemark =
COALESCE(ClientValidationRemark + COALESCE(',' + @ClientValidationRemark,''),
@ClientValidationRemark)
WHERE Id=@ImportId