【问题标题】:How to cast nulls to blank and those with number to decimal 3 places?如何将空值转换为空白,将数字转换为小数点后 3 位?
【发布时间】:2021-07-19 18:01:38
【问题描述】:

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

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

小数点 3 位:

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

如果为空则为空:

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

【问题讨论】:

  • NULLIF 如果两个字符串相等则返回 NULL,否则返回第一个字符串。 ISNULL 用于替换表达式的值,如果涉及到NULL。
  • 你知道如何将 2 合并为一个语句吗?所以它将空值转换为空白,如果小数使其保留 3 位小数?

标签: sql-server decimal varchar


【解决方案1】:

如何使用 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

【讨论】:

  • 谢谢!这帮助我看到 case 语句对我有用: case when gpa is null then ' ' else cast(cast(round(gpa, 3) AS DECIMAL(18, 3)) as varchar) END AS GPA
【解决方案2】:
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 为 null 时设置 0 或 -1 并在代码中进行处理

SELECT CASE WHEN gpa IS NULL THEN '0' ELSE CAST(gpa AS DECIMAL(18,3)) END FROM dbo.termgpa

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 2018-06-12
    • 2021-02-03
    • 1970-01-01
    • 2012-05-04
    • 2015-11-21
    • 2016-09-06
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多