SQL SERVER - Concat NULL数字列

时间:2014-05-05 09:35:58

标签: sql sql-server

我有这张桌子

CREATE TABLE [name].[tblRange] 
(
  [RangeId_PK] numeric(6, 0) IDENTITY(1, 1) NOT NULL,
  [Lower] numeric(18, 2) NOT NULL,
  [Upper] numeric(18, 2) NULL
)

我想连接Lower和Upper但是如果Upper包含NULL值,它总是给我NULL。

这是我的疑问:

SELECT CAST(Lower AS VARCHAR(50)) + '-' + CAST(Upper AS VARCHAR(50))
FROM name.tblRange

我无法使用以下查询,因为它会出现此错误(SQL Server Database Error: Error converting data type varchar to numeric.

SELECT CAST(Lower AS VARCHAR(50)) + '-' + CAST(ISNULL(Upper, '') AS VARCHAR(50))
FROM name.tblRange

请注意,我无法使用ISNULL(Upper, 0),因为这是一个上限(不能为0)。

如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

问题是ISNULL有两种不同的类型作为参数。切换CAST和ISNULL语句:

SELECT CAST(Lower AS VARCHAR(50)) + '-' + ISNULL(CAST(Upper AS VARCHAR(50)), '') FROM name.tblRange

答案 1 :(得分:3)

使用isnull,你走得很远。

您可以使用类似的东西来使用正确的数据类型:

0999lower时,此uppernull显示为值:

SELECT cast(isnull(Lower, 0) AS VARCHAR(50))
       + '-'
       + cast(isnull(Upper, 999) AS VARCHAR(50))
FROM name.tblRange

或者,这只显示lower和更高null时的短划线:

SELECT isnull(cast(Lower AS VARCHAR(50)), '')
       + '-'
       + isnull(cast(Upper AS VARCHAR(50)), '')
FROM name.tblRange