【问题标题】:Can I replace the integer 0 with a string in a column of integers without replacing it within other integers我可以用整数列中的字符串替换整数 0 而不用其他整数替换它吗
【发布时间】:2021-09-07 19:47:44
【问题描述】:

例如,在一列整数中,我想用字符串“-”替换所有 0 值,但是当我这样做时,诸如 2089 之类的值将变为 2-89。有没有办法只替换单个数字0?

【问题讨论】:

  • 列的数据类型是什么?
  • 请发布您到目前为止尝试的内容以及您想要的结果。并完成问题标题以及用 - 替换 0 有什么问题?
  • 一列只能包含一种数据类型;如果您要尝试在同一列中有多个(例如通过让CASE 表达式在WHEN/ELSE 中返回多种数据类型),则将应用data type precedenceint 的优先级高于varchar,因此'-' 的值将返回 转换为int,从而产生0 的值。事实上,这听起来像是一个格式问题,它是 表示层而不是 RDBMS 的工作。
  • 例如,如果您使用的是 .Net 语言,则可以将值显示的元素格式设置为#,##0;-#,##0;-。这将在数​​字中放置千位分隔符(例如1,000)并将0 显示为单个- 字符,这些值仍将是强类型int 值(两者都在RDBMS 和应用程序)。
  • @forpas INT 数据类型

标签: sql-server replace


【解决方案1】:
CASE WHEN integer_col = 0 THEN '-' ELSE CAST(integer_col AS VARCHAR) END AS str_int_col

【讨论】:

  • 我真的不喜欢这个主意...2大于10,但'2' 大于'10'。将显示值留给表示层。
  • @Larnu,“-”是一个 CHAR,不可能在结果集中的同一列中混合使用 CHAR 和 INT。建议的 CASE/WHEN 的想法是将 str_int_col 列添加到结果集中,同时保留可以安排排序的 integer_col。
  • 我的意思是数据应该是强类型的,@Raymi。 str_int_col不是int,它是varchar,因此也将作为varchar 传递给应用程序。虽然您可以在 SQL 中将 0 替换为 '-',但这意味着将 所有 值也更改为 varchar,我强烈认为这不是 好主意。同样,格式化是针对表示层的,而不是 RDBMS。
  • 无论是 MVC 应用程序还是 3 层架构,您都绝对正确。在我的书中,这个问题仅与 SQL-Server 相关。
猜你喜欢
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多