在具有整数数据类型的sql server列中放置空白

时间:2013-09-04 14:10:21

标签: sql sql-server-2008

我有一个表格,其值为0,1,2,3,-1,-2,9,8等。我想在数字小于0的列中放置“空白”,即它应该显示所有记录,如果位置小于0,它应显示''。

我尝试使用STR,但这使我的查询太慢了。查询如下所示:

select CASE 
WHEN position < 0 THEN ''
ELSE position
END Position, column2
from
(
    Select STR (column1) as position, column2 from table
) as t1

有人能建议更好的方法来显示第1列中的''吗?还有其他方法吗?我可以用什么而不是str?

更新:column1是int类型,我不想将null放入空字符串。我知道我不能在int列中显示空字符串,所以必须使用强制转换。只是想确保它不会减慢我的查询速度,寻找能够在更短的时间内返回结果的最佳选项。

6 个答案:

答案 0 :(得分:2)

尝试这种方式:

Select 
  case 
  when column1 <0 then null
  else column1 
  end as position, column2 
from tab

答案 1 :(得分:2)

您可以将CASE表达式放入查询中,并将STR替换为CAST,如下所示:

SELECT
    CASE WHEN position < 0 THEN '' ELSE CAST(column1 as VARCHAR(10)) END as position
,   column2
FROM myTable

答案 2 :(得分:2)

不要在所有行上使用STR并比较字符串。而是比较整数并仅在需要时使用STR

SELECT 
 CASE WHEN column1 < 0 THEN ''
      ELSE STR (column1) 
  END AS position
, column2 
FROM table

答案 3 :(得分:2)

您也可以使用以下

coalesce(convert(varchar(10),position),'') 

这是因为你在int字段中有空值而你想显示它

答案 4 :(得分:1)

试试这个。

SELECT
    CASE WHEN Position < 0
        THEN ''
        ELSE CONVERT(VARCHAR(11), Position)
    END AS Position,
    column2
FROM table;

答案 5 :(得分:0)

如果要使用空格,则需要将字段转换为字符串类型 尝试这样的事情:

SELECT CASE 
         WHEN COLUMN1 < 0 THEN '' 
         ELSE POSITION 
       END Position, 
       COLUMN2 
FROM   (SELECT CAST(COLUMN1 AS NVARCHAR(10)) AS position, 
               COLUMN2 
        FROM   TABLE, 
               COLUMN1) AS t1 

我同时使用原始列和已转换的列,因为转换后< 0的工作方式不同,我们会得到意想不到的结果。