0

如果我希望在没有 gpa 的情况下输出为空白,并且在有 gpa 的情况下四舍五入到小数点后 3 位 - 我如何在一个语句中得到它?

以下是我提出的 2 条语句,我无法将它们组合为一个语句(如果答案为空,则为空白,如果有 gpa,则为小数点后 3 位)。

小数点 3 位:

NULLIF(cast(round(termgpa.gpa, 3) AS DECIMAL(18, 3)), 0)

如果为空,则为空白:

isnull(cast(termgpa.gpa as varchar), ' ')
4

2 回答 2

0
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
于 2021-07-19T19:34:43.490 回答
0

使用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
于 2021-07-19T19:25:50.460 回答