1

我有一个表,其值为 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 列中显示空字符串,所以必须使用强制转换。只是想确保它不会减慢我的查询速度,寻找在更短的时间内返回结果的最佳选项。

4

6 回答 6

2

试试这个方法:

Select 
  case 
  when column1 <0 then null
  else column1 
  end as position, column2 
from tab
于 2013-09-04T14:14:25.623 回答
2

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

SELECT
    CASE WHEN position < 0 THEN '' ELSE CAST(column1 as VARCHAR(10)) END as position
,   column2
FROM myTable
于 2013-09-04T14:15:06.360 回答
2

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

SELECT 
 CASE WHEN column1 < 0 THEN ''
      ELSE STR (column1) 
  END AS position
, column2 
FROM table
于 2013-09-04T14:17:02.183 回答
2

你也可以使用以下

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

这只是以防万一您在 int 字段中有空值并且您想显示它

于 2014-12-04T11:40:15.647 回答
1

尝试这个。

SELECT
    CASE WHEN Position < 0
        THEN ''
        ELSE CONVERT(VARCHAR(11), Position)
    END AS Position,
    column2
FROM table;
于 2013-09-04T14:17:55.063 回答
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工作方式不同,我们会得到意想不到的结果。

于 2013-09-04T14:14:36.793 回答