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