当前位置: 首页 > 面试题库 >

Access和SQL Server计算日期的方式不同

花阳辉
2023-03-14
问题内容

我们有一些通用工具,除其他外,可以保存和显示日期。它将另存为数字,例如41247。

如果我将其转换回Access中的日期,则会得到2012/12/04-是正确的。
[使用Format(41247;“常规日期”)或Format(Format(“ 41247”,“ Short Date”),“ Short Date”)]

如果我将该数字转换回SQL
Server中的日期,则会得到2012/12/06-不正确。我正在使用CONVERT(datetime,CONVERT(real,41247))

为什么会有区别,我可以在SQL中使用什么来解决它?


问题答案:

因此,当我从excel文件导入数据时遇到了这个问题。

您有2天的差异有两个原因

原因1在您的SQL Server中,1900年1月1日是Day 0,而在访问中是Day 1。

(我没有使用Access,但是如果您在Excel中输入日期1900-01-01并将单元格格式设置为数字,则会得到1)。

原因2 1900年不是a年。SQL Server知道它,但Access不知道。它认为存在1900年2月29日。

在您的SQL Server中运行

SELECT DATEDIFF(dd, 0, '1900-01-01')
SELECT DATEDIFF(dd, 0, '1900-02-28')
SELECT DATEDIFF(dd, 0, '1900-03-01')

输出将是

0
58 
59

但是当你尝试跑步时

SELECT DATEDIFF(dd, 0, '1900-02-29')

你会得到一个错误

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

由于上述两个原因,您的访问时间将增加2天。

因此,对于2012/12/04,Access返回41247,而SQL Server将给您41245。

希望能有所帮助。

编辑

看看Eric Lippert的评论,他提到了他和Joel Spolsky撰写的2篇非常有趣的博客文章。



 类似资料:
  • 主要内容:示例在MS Access中,表达式就像Excel中的公式。 这包括一些可以单独使用或组合使用以产生结果的元素。 表达式可以包括运算符,常量,函数和标识符。 表达式可用于执行各种任务,从检索控件的值或将查询条件提供给查询来创建计算的控件和字段,或者为报表定义组级别。 在本章中,我们将着重于创建一个称为计算表达式的非常具体的表达式。创建几个计算的字段,这些字段将计算并显示不存储在数据库本身任何位置的数据,

  • 主要内容:1. 如何创建计算字段,2. Tableau计算编辑器,3. 创建公式,4. 使用计算字段Tableau可以提供大量内置函数,例如:日期函数。日期是大多数数据分析中广泛使用的关键领域之一。 您可以操纵简单日期,例如添加或减去日期中的天数。此外,还可以创建包含日期的复杂表达式。 以下是创建计算字段并在其中使用日期函数的步骤。 1. 如何创建计算字段 连接到样本超市(sample superstore)数据源后。 然后转到“分析(Analysis)”菜单。 然后单击“创建计算字段(Crea

  • 本文向大家介绍PHP计算指定日期所在周的开始和结束日期的方法,包括了PHP计算指定日期所在周的开始和结束日期的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP计算指定日期所在周的开始和结束日期的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 我有一个表,其中日期字段是VARCHAR2类型(20字节),日期字段是日期类型。 日期一的输出为2019年1月29日20:22:08,日期二的输出为2019年1月25日。 我需要根据这两个字段之间的天数间隔计算记录,但我遇到了这个错误: ORA-00932:不一致的数据类型:预期的数字,得到间隔天到第二00932. 00000-"不一致的数据类型:预期%s得到%s" 如何修复此错误?

  • 本文向大家介绍python计算日期之间的放假日期,包括了python计算日期之间的放假日期的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python计算日期之间的放假日期,供大家参考,具体内容如下 代码如下: 打印结果如下: 中国 (4, [datetime.date(2014, 4, 20), datetime.date(2014, 12, 25), datetime.date(

  • 问题 你需要在给出的年份中找到复活节的月份和日期。 解决方案 下面的函数返回数组有两个要素:复活节的月份( 1-12 )和日期。如果没有给出任何参数,给出的结果是当前的一年。这是 在CoffeeScript 的匿名公历算法实现的。 gregorianEaster = (year = (new Date).getFullYear()) -> a = year % 19 b = ~~(year