【问题标题】:Update Month value on datefield in MS sql 2005更新 MS sql 2005 中日期字段的月份值
【发布时间】:2008-10-02 14:24:55
【问题描述】:

我需要一种方法来更新数据库中 dateTime 字段的月份值。我已经超过了本月的 int 值,需要将其用于更新。 是否可以在 sql 语句中执行此操作,或者我最好在 web 服务中的 c# 中执行此操作?

【问题讨论】:

  • 传入的整数是新月份值还是增量?

标签: .net sql web-services


【解决方案1】:

向下移动然后再次向上移动:

UPDATE table
SET datecol = DATEADD(m, @newmonth, DATEADD(m, -MONTH(datecol), datecol))
WHERE id = @id

或者,更简单地说:

UPDATE table
SET datecol = DATEADD(m, @newmonth - MONTH(datecol), datecol)
WHERE id = @id

【讨论】:

  • 谢谢,不过我收到了这个错误信息。子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。
  • 您需要发布您的代码,我的查询与此无关,因为它确实包含任何子查询。
  • 这就是我所拥有的。声明@newMonth int SET @newMonth = 5; UPDATE dbo.tb_bookings SET startDateTime = DATEADD(month, @newMonth - DATEPART(month, startDateTime) , startDateTime) WHERE requestPackID = '383';
  • 我认为您可能遇到了触发器问题。该代码没有任何子查询,即使要影响多行,它也可以工作。现在,如果多行受到影响,触发器可能不会预料到这一点 - 请记住,UPDATE 触发器只会在此语句上触发一次。
  • 谢谢,我想你可能是正确的触发器。我会调查的。
【解决方案2】:

您可以在 Sql Server 中的 TSQL 中完成这一切。查看DateDiffDateAdd 函数。

我希望这会起作用:

DECLARE @newMonth int
SET @newMonth = 5 --As an example

UPDATE dbo.TheTable
SET DateField = DATEADD(month, @newMonth - DATEPART(month, DateField) , DateField)

【讨论】:

  • 谢谢,但是我需要更新多行并且在子查询返回多个值时遇到错误。
  • 此示例中没有任何子查询,这在更新表中的多行时可以正常工作。您可能想发布您遇到问题的特定代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多