我有这张桌子
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)。
如何解决这个问题?
答案 0 :(得分:5)
问题是ISNULL有两种不同的类型作为参数。切换CAST和ISNULL语句:
SELECT CAST(Lower AS VARCHAR(50)) + '-' + ISNULL(CAST(Upper AS VARCHAR(50)), '') FROM name.tblRange
答案 1 :(得分:3)
使用isnull
,你走得很远。
您可以使用类似的东西来使用正确的数据类型:
当0
和999
为lower
时,此upper
,null
显示为值:
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