sql 如何更新某个字段的时间为当前时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 如何更新某个字段的时间为当前时间相关的知识,希望对你有一定的参考价值。

如一个表
create table UserInfo

(
[UID] int IDENTITY(1,1) PRIMARY KEY ,

[时间] DATETIME NOT NULL DEFAULT(getdate())

)

然后我想对某个记录更改
updata UserInfo set 时间 = getdate() where id = 1

这样不可以吗,他说时间 = getdate()这里不对

参考技术A updata UserInfo set 时间 = cast(getdate() as datetime) where id = 1 参考技术B 把字段名“时间”用方括号括起来试试。 参考技术C 用Oracle的SQL语句:
create table tab(
... ...
rqsj date default sysdate,
... ...
);
参考技术D 将时间改为[时间]

实体框架 - 将字段值更新为当前数据库服务器时间

我从数据库中撤回了一个实体对象,我需要将日期更新到数据库服务器的日期/时间 - 通常你可以通过使用SQL getDate()函数设置它来实现这一点。

如何在以下场景中完成此操作:

var client = context.client.Where(c=>c.clientID == 1).FirstOrDefault();

// the value needs to be the value of the server's current date, i.e, getDate()... not DateTime.Now
client.someDate = <somevalue>;
context.SaveChanges();
答案

尝试插入以下内容代替示例中的第四行:

var dateQuery = context.CreateQuery<DateTime>("CurrentDateTime() ");
client.SomeDate = dateQuery.AsEnumerable().First();
另一答案

DateTime.Now将从您的服务器(Web服务器而不是数据库服务器)提供当前日期。如果client.someDate是DateTime字段,那么您可以分配DateTime.Now并将其更新回数据库。

另一答案

这是我在EF6 / MVC5 VB.NET应用程序中执行此操作的方法。

问题:使用一个查询返回getdate()值,然后使用另一个查询来更新具有检索到的getdate()值的记录是不可接受的恕我直言。这是两个查询,只需要一个。此外,返回的getdate()值在回写时从技术上讲是不准确的,因为时间已过。

解决方案:下面的代码片段将单个可空日期时间字段更新为getdate()的当前值,并返回更新后的getdate()值(如果您不需要返回的值,只需删除OUTPUT INSERTED.theTime段)。所有这些都是在SQL查询中完成的。

Dim theTime As DateTime? = db.Database.SqlQuery(Of DateTime?) _
("UPDATE myTable SET theTime = getdate() OUTPUT INSERTED.theTime WHERE someRecordID = @someRecordID", New SqlParameter("@someRecordID", someRecordID)).First()

似乎必须有一些更好的解决方案(或者这是MS的严重疏忽,在更新记录时不使用getdate()是一种常见且正确的做法吗?)。如果有人能在评论或其他答案中指出更清洁的方法,我会很激动。

理想情况下,我希望能够这样说:

Dim craftBeer = context.CraftBeers.Find(id)
... (update other craftBeer properties) ...
craftBeer.date_emptied = SqlServer.SqlFunction.GetDate
context.Entry(craftBeer).State = EntityState.Modfied
context.SaveChanges()

...但不幸的是,显然SqlServer.SqlFunctions.GetDate不能像这样使用EF。

另一答案

我认为这是一个非常古老的问题,但我也有这个问题。我刚刚想到你可以在SQL Server上创建一个只是RETURNS GETDATE()的标量函数。然后在实体框架中,将该SQL函数拉入您的上下文中。似乎有点做作,但我认为它会起作用。

另一答案

也许为时已晚,但如果可以帮助某人,我就离开它了。我们可以从数据库服务器获取当前的日期时间,例如:

public DateTime GetDate()
{ 
  var date = context.client.Select(c => DateTime.Now).First(); 
  return date;
}

所以我们使用的功能:

var client = context.client.Where(c=>c.clientID == 1).FirstOrDefault();
client.someDate = GetDate();
context.client.Add(client);

以上是关于sql 如何更新某个字段的时间为当前时间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用当前日期更新访问日期/时间字段

mysql如何判断字段时间小于当前时间3天

SQL2000如何让一个字段在插入和更新的时候显示当前系统时间

利用SQL语句如何获得两个日期之间相差的天数

MySQL查询时,将查询时间更新为当前时间now()的sql语句写法

如何用SQL语句将数据库中的表的某一时间型字段的默认值设置为当前日期