SQL SERVER-Concat空数值列

SQL SERVER-Concat空数值列,sql,sql-server,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 ) 我想要concat Lower和Upper,但如果Upper包含NULL值,它总是给我NULL 这是我的疑问: SELECT CAST(Lower AS VARCHAR(50

我有这张桌子

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
)
我想要concat Lower和Upper,但如果Upper包含NULL值,它总是给我NULL

这是我的疑问:

SELECT CAST(Lower AS VARCHAR(50)) + '-' + CAST(Upper AS VARCHAR(50))
FROM name.tblRange
我无法使用以下查询,因为它将给出此错误(
SQL Server数据库错误:将数据类型varchar转换为数字时出错。

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


如何解决此问题?

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

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

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

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

通过使用
isnull
,您已经走上了正确的道路

您可以使用类似的方法来使用正确的数据类型:

下限
上限
空时,此选项将
0
999
显示为值:

SELECT cast(isnull(Lower, 0) AS VARCHAR(50))
       + '-'
       + cast(isnull(Upper, 999) AS VARCHAR(50))
FROM name.tblRange
SELECT isnull(cast(Lower AS VARCHAR(50)), '')
       + '-'
       + isnull(cast(Upper AS VARCHAR(50)), '')
FROM name.tblRange
或者,当
lower
和upper为
null
时,此项仅显示破折号:

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

通过使用
isnull
,您已经走上了正确的道路

您可以使用类似的方法来使用正确的数据类型:

下限
上限
空时,此选项将
0
999
显示为值:

SELECT cast(isnull(Lower, 0) AS VARCHAR(50))
       + '-'
       + cast(isnull(Upper, 999) AS VARCHAR(50))
FROM name.tblRange
SELECT isnull(cast(Lower AS VARCHAR(50)), '')
       + '-'
       + isnull(cast(Upper AS VARCHAR(50)), '')
FROM name.tblRange
或者,当
lower
和upper为
null
时,此项仅显示破折号:

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

如果它包含空值,那么您的上限是多少?将空值设为ISNULL(上限“”)或NULL ISNULL(上限“”)或您想要的任何值。它不仅必须是0。如果它包含NULL值,那么您的上限是多少?将空设置为ISNULL(上限“”)或NULL ISNULL(上限“”)或您想要的任何内容。它不仅必须是0。