如何将空值转换为空白并将数字转换为小数点后 3 位?
How to cast nulls to blank and those with number to decimal 3 places?
如果我希望在没有 gpa 的情况下输出为空白,而在有 gpa 的情况下四舍五入到小数点后 3 位 - 我如何在一个语句中得到它?
这是我想出的 2 个陈述,但我无法将其合并为一个(如果答案为 null,则为空白,如果有 gpa,则为小数点后 3 位)。
小数3位:
NULLIF(cast(round(termgpa.gpa, 3) AS DECIMAL(18, 3)), 0)
如果为空则空白:
isnull(cast(termgpa.gpa as varchar), ' ')
使用 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
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
我创建了只有两列的示例 table。现在您可以选择将小数列转换为 varchar,也可以设置 0 而不是空值,如下所示
SELECT ISNULL(CAST(gpa AS VARCHAR(20)),'') FROM dbo.termgpa
或者您可以在 gpa 为 null 时设置 0 或 -1 并在代码中进行处理
SELECT CASE WHEN gpa IS NULL THEN '0' ELSE CAST(gpa AS DECIMAL(18,3)) END FROM dbo.termgpa
如果我希望在没有 gpa 的情况下输出为空白,而在有 gpa 的情况下四舍五入到小数点后 3 位 - 我如何在一个语句中得到它?
这是我想出的 2 个陈述,但我无法将其合并为一个(如果答案为 null,则为空白,如果有 gpa,则为小数点后 3 位)。
小数3位:
NULLIF(cast(round(termgpa.gpa, 3) AS DECIMAL(18, 3)), 0)
如果为空则空白:
isnull(cast(termgpa.gpa as varchar), ' ')
使用 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
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
我创建了只有两列的示例 table。现在您可以选择将小数列转换为 varchar,也可以设置 0 而不是空值,如下所示
SELECT ISNULL(CAST(gpa AS VARCHAR(20)),'') FROM dbo.termgpa
或者您可以在 gpa 为 null 时设置 0 或 -1 并在代码中进行处理
SELECT CASE WHEN gpa IS NULL THEN '0' ELSE CAST(gpa AS DECIMAL(18,3)) END FROM dbo.termgpa