在sql查询中,是否有一个允许所有列 NULL 返回空字符串而不是 NULL ?目前我正在做一项调查 CASE 每列,例如:
NULL
CASE
SELECT CASE WHERE column_name IS NULL THEN '' ELSE column_name END FROM TABLE
vyu0f0g11#
您必须使用coalesce或isnull在列级别执行此操作。但是,如果您想将所有列放在一起,我建议采取一种变通方法。将数据复制到默认值为emptystring的表中。如果你不想要物理表,你也可以考虑临时表。
CREATE TABLE TableCopy ( Col1 INT NULL = '', Col2 INT NULL ='' . . )
现在,将数据加载到上表中。
INSERT INTO Tablecopy SELECT * FROM OriginalTable
现在,如果从tablecopy选择数据,则所有null都将替换为“”,因为默认值将替换null输入
SELECT * FROM TableCopy
31moq8wy2#
为了避免列类型约束检查,应该将列转换为string/varchar。所以新列只显示varchar类型。
SELECT CASE WHEN column_name IS NULL THEN '' ELSE CAST(column_name AS VARCHAR(255)) END AS new_column_name FROM TABLE
编辑否则,可以使用concat\u ws函数用分隔符连接两个或多个列值。如果它接收到所有空值的参数,那么它将返回一个空字符串。https://docs.microsoft.com/en-us/sql/t-sql/functions/concat-ws-transact-sql?view=sql-server-ver15
SELECT CONCAT_WS(', ', column_name1, column_name2, ..) AS value FROM TABLE
2条答案
按热度按时间vyu0f0g11#
您必须使用coalesce或isnull在列级别执行此操作。但是,如果您想将所有列放在一起,我建议采取一种变通方法。
将数据复制到默认值为emptystring的表中。如果你不想要物理表,你也可以考虑临时表。
现在,将数据加载到上表中。
现在,如果从tablecopy选择数据,则所有null都将替换为“”,因为默认值将替换null输入
31moq8wy2#
为了避免列类型约束检查,应该将列转换为string/varchar。所以新列只显示varchar类型。
编辑
否则,可以使用concat\u ws函数用分隔符连接两个或多个列值。如果它接收到所有空值的参数,那么它将返回一个空字符串。
https://docs.microsoft.com/en-us/sql/t-sql/functions/concat-ws-transact-sql?view=sql-server-ver15