SQL 字符串连接,仅当 column 不为 null 时才以 ',' 分隔

标签 sql sql-server string-concatenation

我想在我的数据库中更新字符串( varchar )列。我想连接 ',' + 值。

这是有效的,但如果数据库列中的值为空,我不想添加 ',' (逗号)。

开头有逗号是没有意义的。

UPDATE ImportState
SET ClientValidationRemark = ClientValidationRemark + ',' + @ClientValidationRemark
WHERE Id=@ImportId

当然,如果值不为空,我每次都想添加逗号。你知道任何简单,干净的方法来做到这一点吗?我总是更新一行,@ImportId是主键。

最佳答案

好吧,让我首先说将分隔字符串保留在单个列中是一种糟糕的数据库设计,只有一个异常(exception):当数据从未在 sql 中使用而在应用程序中需要作为分隔字符串时。在超过 16 年的编程生涯中,我只存储过一次这样的值,而且正是这种情况。

但是,如果您选择存储分隔值,这里有一些很容易做到的事情:

UPDATE ImportState
SET ClientValidationRemark = ISNULL(NULLIF(ClientValidationRemark, '') + ',', '') +
                             @ClientValidationRemark
WHERE Id=@ImportId

利用将字符串连接到空值将导致空值的事实(注意:仅当您使用 string concatenation operator ( + ) 时,而不是当您使用内置函数时 concat ),我使用了 NULLIF转换 ClientValidationRemark 中的空字符串值为空,然后 ISNULL转换 null + ', '回到空字符串。

关于SQL 字符串连接,仅当 column 不为 null 时才以 ',' 分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913374/

相关文章:

sql-server - 跨多个利率计算利息

sql-server - 如何使用条件/where子句修改xml变量

types - 为什么 Elm 使用 '++' 运算符来连接字符串?

C# Linq to MySQL query with join 会产生错误的 SQL?

sql - Golang时间比较无法正常工作

sql-server - SQL Server 2008 - FileStream - 禁用文件的 8.3 名称和上次访问时间

java - 字符串连接真的那么慢吗?

c# - 在 C# 中使用 UPDATE MySQL 命令

sql - 有没有一种方法可以将 float 转换为小数而不进行四舍五入并保持其精度?

java - Java用+优化了多少字符串连接?