【问题标题】:SQL command that decreases value in table by 1将表中的值减 1 的 SQL 命令
【发布时间】:2013-05-26 18:59:07
【问题描述】:

我有一张名为Orders(Id,Number,ProductName) 的表。

我需要一个 SQL 命令,将 Number 列中的值减 1。Number 列的类型为 nvchar(50)

【问题讨论】:

标签: sql sql-server winforms


【解决方案1】:

这就是你要找的吗?

UPDATE Orders
SET Number = Number - 1

SQL Fiddle Demo

如果您的 Number 列中的某些值是非数字的,您可以使用 isumeric 来检查:

UPDATE Orders
SET Number = Number - 1
WHERE IsNumeric(Number) = 1

More Fiddle

【讨论】:

  • 对不起,我忘记了列类型
  • @user2302416 只要NVARCHAR 中的值是数字,它仍然有效。不过要注意的是,上面的更新会更新整个表中的所有订单,而不仅仅是特定的。
  • 如果你使用IsNumeric()检查,我不明白你为什么要改为添加一个。
【解决方案2】:

我想你想要:

Update Orders
    set Number = cast(cast((case when isnumeric(Number) = 1 then Number end) as int
                          ) - 1 as nvarchar(50)
                     )

仅仅因为一个列被称为Number,我不相信“数字”会一直在其中,除非我检查。如果它确实是一个数字,则将其声明为某种数字类型。

【讨论】:

  • 为什么不只是UPDATE Orders SET Number = CASE WHEN ISNUMERIC(Number) = 1 THEN Number-1 ELSE Number END
  • @JoachimIsaksson 。 . .你可以这样做。我只是在混合类型时感到紧张。我在隐式转换方面有过很多痛苦的经历,所以我现在尽可能地显式。
  • 可能是明智的,不是抱怨,而是“最好问问,以防万一这是个坏主意”:)
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多