【问题标题】:UPDATE SQL Command not saving the resultsUPDATE SQL 命令不保存结果
【发布时间】:2019-05-11 13:08:19
【问题描述】:

我查看了论坛,但找不到像我这样的问题。

基本上我有一个名为 [p005_MMAT].[dbo].[Storage_Max] 的表。它具有三列 Date、HistValue 和 Tag_ID。我想让 'HistValue' 列中的所有值都有 2 位小数。例如,如果一个数字是 1.1,我希望它是 1.10,或者如果它是 1,那么我也希望它看起来像 1.00。

这是我正在使用的 sql 更新语句

update [p005_MMAT].[dbo].[Storage_Max]
set [HistValue] = cast([HistValue] as decimal (10,2))
where [Tag_ID] = 94

执行查询后,它说 3339 行受到影响,但是当我执行一个简单的选择语句时,它似乎该列没有影响。我在 select 语句中使用了该 cast 函数,它添加了两位小数。

请指教。

【问题讨论】:

  • HistValue的数据类型是什么
  • HistValue 的数据类型是真实的
  • 您根本没有使用该语句更改值。您只需将histvalue 转换为小数,然后将该(相同)值分配回histvalue,这会将其转换回浮点数(仍然具有相同的值)

标签: tsql sql-update


【解决方案1】:

问题在于数据类型和 SQL Server。浮点数或实数不会有尾随零。您要么必须更改列的数据类型,要么只处理它并处理查询或应用程序中的格式。

你可以像下面这样运行

select  
  cast([HistValue] as decimal (10,2))
from [p005_MMAT].[dbo].[Storage_Max]
where [Tag_ID] = 94

【讨论】:

  • 感谢您的回复@SQLChao。如果我理解正确,假设我在 [HistValue] 列中有一个值为 13.6 的值,因此通过运行上述强制转换语法不会将数字更改为 13.6,除非运行独立的 sql 查询。
  • @FaisalShibli 这是正确的,因为您的列的数据类型不会有尾随零。我想更好的问题是为什么你需要更新表而不是仅仅格式化查询中的数据。看我的例子
  • 感谢您的解释。这就是我首先尝试的。不幸的是,我运行这个 sql 查询的第三方应用程序没有添加尾随零。这是因为全局应用程序编号系统不允许尾随 0。示例 0.01 之类的数字将显示为 0.01,但是 3.60 之类的数字将显示为 3.6,或者 1.0 之类的数字将显示为 1。因此,我想也许可以更新主数据库并查看应用程序如何读取它。我会看看你的例子。再次感谢!
猜你喜欢
  • 2012-04-21
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2016-09-24
  • 2011-12-29
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多