如果我希望在没有 gpa 的情况下输出为空白,并且在有 gpa 的情况下四舍五入到小数点后 3 位 - 我如何在一个语句中得到它?
以下是我提出的 2 条语句,我无法将它们组合为一个语句(如果答案为空,则为空白,如果有 gpa,则为小数点后 3 位)。
小数点 3 位:
NULLIF(cast(round(termgpa.gpa, 3) AS DECIMAL(18, 3)), 0)
如果为空,则为空白:
isnull(cast(termgpa.gpa as varchar), ' ')
如果我希望在没有 gpa 的情况下输出为空白,并且在有 gpa 的情况下四舍五入到小数点后 3 位 - 我如何在一个语句中得到它?
以下是我提出的 2 条语句,我无法将它们组合为一个语句(如果答案为空,则为空白,如果有 gpa,则为小数点后 3 位)。
小数点 3 位:
NULLIF(cast(round(termgpa.gpa, 3) AS DECIMAL(18, 3)), 0)
如果为空,则为空白:
isnull(cast(termgpa.gpa as varchar), ' ')
CREATE TABLE [dbo].[termgpa](
[id] [int] NULL,
[gpa] [decimal](18, 3) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (1, CAST(20.000 AS Decimal(18, 3)))
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (2, NULL)
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (3, CAST(15.761 AS Decimal(18, 3)))
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (4, CAST(45.650 AS Decimal(18, 3)))
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (5, NULL)
GO
INSERT [dbo].[termgpa] ([id], [gpa]) VALUES (6, CAST(78.100 AS Decimal(18, 3)))
GO
我创建了只有两列的示例表。现在您可以选择将您的十进制列转换为 varchar 或者您可以设置 0 而不是 null 值,如下所示
SELECT ISNULL(CAST(gpa AS VARCHAR(20)),'') FROM dbo.termgpa
或者您可以在 gpa 为空时设置 0 或 -1 并在代码中处理相同的
SELECT CASE WHEN gpa IS NULL THEN '0' ELSE CAST(gpa AS DECIMAL(18,3)) END FROM dbo.termgpa
使用case语句怎么样。此外,如果您希望该列同时包含空格和十进制数字,则必须将其转换为 varchar。下面的语句显示了 null 和非 null。
declare @gpa decimal(18,5)
set @gpa = '5.789456'
select
case
when @gpa is null then ''
else cast(cast(round(@gpa, 3) AS DECIMAL(18, 3)) as varchar)
end as gpa
--returns 5.789
set @gpa = null
select
case
when @gpa is null then ''
else cast(cast(round(@gpa, 3) AS DECIMAL(18, 3)) as varchar)
end as gpa
--returns blank