【问题标题】:How to substitute NULL with empty string in sql 2017如何在 sql 2017 中用空字符串替换 NULL
【发布时间】:2020-06-18 11:00:42
【问题描述】:

occurrence_limit 列是货币数据类型,

如果是 NULL,我只想要空字符串 (''),但它给了我 0.00

ISNULL(occurrence_limit,'')  as occurrence_limit

我怎样才能简单地使用'' 而不是0.00

【问题讨论】:

  • 空字符串不是money 的有效值。为什么不直接使用null
  • 不要。就那么简单。在您的表示层中处理它。 '' 不是数字,因此不能存储为 money 值,而是隐式转换为 0。您当然不想将您的数字视为varchar(我可以向您保证100 大于2,而不是小于它)所以保持原样。
  • 输出到excel表。用户要求如果为NULL则为空
  • 所以修复输出到 Excel 的内容,@Serdia。 大多数 应用程序实际上并不显示NULL,它们显示的是一个空的“单元格”,因此您使用的任何ETL 过程实际上都是放置“NULL”。修复 ETL 过程。只有真正的 IDE 倾向于显示 NULL,因为它在处理字符串时'' 不同。

标签: sql-server tsql sql-server-2012


【解决方案1】:

正如其他人所说,不要这样做。但如果您需要:

SELECT ISNULL(CONVERT(VARCHAR(9), occurrence_limit), '') AS occurrence_limit

【讨论】:

  • 只是为了说明它不好的原因:它的值不再是数字了。对于重要的事情,比如钱,这是一个问题。例如,'100'小于'2''17' + '2' 等于'172'
【解决方案2】:
DROP table #testStak create table #testStak(nombre varchar(50),moneycant money)

INSERT INTO #testStak VALUES ('ALFA',10) 
INSERT INTO #testStak VALUES ('BETA',NULL) 
INSERT INTO #testStak VALUES ('GAMMA',5000)

SELECT nombre,ISNULL(CAST(moneycant AS varchar),'') FROM #testStak

【讨论】:

  • 与问题无关
  • 实际上是这样,它是一种在货币列中放置一个空格而不是 0.00 的形式。
【解决方案3】:

试试这个:

SELECT ISNULL(NULLIF(occurrence_limit, 0),'')  as occurrence_limit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2019-02-09
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多