首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MS日期时间精度问题

MS日期时间精度问题
EN

Stack Overflow用户
提问于 2010-04-12 08:10:27
回答 7查看 9.7K关注 0票数 8

我遇到的情况是,两个人可能在两台不同的计算机上按相同的顺序工作(存储在MS数据库中)。为了防止数据丢失,在这样的情况下,一个人将首先保存他的订单副本,然后第二个将保存他的副本并覆盖第一个,我在保存之前添加了一个针对lastSaved字段(datetime)的检查。

代码大致如下所示:

代码语言:javascript
运行
复制
private bool orderIsChangedByOtherUser(Order localOrderCopy)
{
    // Look up fresh version of the order from the DB
    Order databaseOrder = orderService.GetByOrderId(localOrderCopy.Id);

    if (databaseOrder != null &&
        databaseOrder.LastSaved > localOrderCopy.LastSaved)
    {
        return true;
    }
    else
    {
        return false;
    }
}

这在大多数情况下都是可行的,但我发现了一个小错误。

如果orderIsChangedByOtherUser返回false,则本地副本将使其lastSaved更新到当前时间,然后持久化到数据库。lastSaved在本地副本和DB中的值现在应该是相同的。但是,如果orderIsChangedByOtherUser再次运行,它有时会返回true,即使没有其他用户对DB进行更改。

在Visual中调试时,databaseOrder.LastSaved和localOrderCopy.LastSaved的值似乎是相同的,但仔细看时,它们有时相差几毫秒。

我发现这篇文章在SQL中对datetime的毫秒精度做了一个简短的说明:

另一个问题是Server存储日期时间的精度为3.33毫秒(0毫秒)。00333秒)。

对于这个问题,我能想到的解决方案是比较这两个日期时间,如果它们的差值小于10毫秒,则将它们视为相等。

那么,我对您的问题是:是否有更好/更安全的方法来比较MS中的两个日期时间值,看看它们是否完全相同?

EN

Stack Overflow用户

发布于 2020-08-18 19:32:53

检查SQL 2014的兼容版本- SQL 2016中的更改将实体框架中的DateTime转换为DateTime2(7)。

MSN

尝试使用此SQL对YourTable和YourDateTime列进行测试:

代码语言:javascript
运行
复制
select top 100 <YourDateTimeColumn> date1,
cast(<YourDateTimeColumn> as datetime2(3)) date2,
cast(<YourDateTimeColumn> as datetime2(7)) date3,
case when <YourDateTimeColumn> <> cast(<YourDateTimeColumn> as datetime2(3)) 
   then 'unequal' else 'equal' end as datesareequal
from <YourTableName>
票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2620627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档