在select *语句中将空值替换为空白

时间:2018-12-19 15:17:54

标签: sql sql-server

我有100列的表格。我想写select * from table,空列值应替换为空白。我不想在其中包含100列 我的选择语句并写:

 select
   isnull(col1,''), 
   isnull(col2,''),
   ...
   isnull(col100,'') 
 from table

3 个答案:

答案 0 :(得分:3)

检查一下:

DECLARE @TableName  VARCHAR(MAX)='ASC_LOT_TBL'
DECLARE @SchemaName VARCHAR(MAX)='dbo'
DECLARE @ColumnList VARCHAR(MAX)

SELECT @ColumnList= ISNULL(@ColumnList+',','')+
    CASE WHEN  DATA_TYPE LIKE '%char' THEN 'ISNULL('+COLUMN_NAME+','''') AS '+COLUMN_NAME
         WHEN  DATA_TYPE = 'int' THEN 'ISNULL('+COLUMN_NAME+',''0'') AS '+COLUMN_NAME
    ELSE COLUMN_NAME END
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME=@TableName
AND TABLE_SCHEMA=@SchemaName
ORDER BY ORDINAL_POSITION

SELECT  'SELECT '+@ColumnList+' FROM ' +@SchemaName+'.'+@TableName

答案 1 :(得分:1)

好吧,您可以遍历上面在SQL / script级别上的所有建议,或者将表的设计更改为不允许NULL并将默认值设置为''(在MSSQL中为('')) 。

enter image description here

这样,当插入新条目时,该列将存储数据/值“”,而不是NULL。 在这种情况下,您可以从带有“空白”的表中选择*作为回报,而不是NULL。

您需要从脚本或表设计中选择一种或另一种方法。

答案 2 :(得分:0)

X/Y problem apart,回答您的特定问题:

要编写查询,您可以在编辑器中使用正则表达式搜索并替换,以避免每行编辑一百次。

只需选择所有相关行,其列名在t之后,

SELECT

打开搜索并用col1, col2, col3, ... 替换(\S+),(Ctrl + H),然后用ISNULL($1, ''),替换,在您喜欢的编辑器中激活了正则表达式模式,并将替换仅应用于选择项。

SSMS中的插图:

Search and replace regex in SSMS

它可以在Visual Studio,SQL Server Management Studio,记事本++等中运行...

(前提是您的列名中没有空格,否则请发表评论以指定列名的方式,我们可以找到一种快速的解决方案)

最后一行需要手动编辑,但是您仍然保存了99个版本;)。

您还应该能够创建一个视图,然后在视图上执行SELECT,这将减少只编写一次该视图的需要(但未经测试,并且不确定是否存在性能问题)。您的用例)