【问题标题】:Best way to compare Time (or Date) in sql?在sql中比较时间(或日期)的最佳方法?
【发布时间】:2012-07-03 13:24:16
【问题描述】:

我需要在我的 Sql 服务器中进行两次比较,一次在日期之间进行,一次在时间之间进行。我正在使用 C# 和 Sql Server 以及 Linq-to-sql。我想存储两个时间字段(进入时间,退出时间)。现在我想得到差异(例如 12:30 , 18:15 差异是 5:45)。我应该使用什么数据类型?我对日期有同样的问题,我想得到两个日期的差异,但是“日期时间”数据类型存储了关于时间的冗余数据,我只需要日期。我想要最简单的方法和最少的代码。我目前正在保存这样的“1045”,当我获取它时,我在中间添加了一个“:”,它变成了“10:45”,这样会有很多问题。

【问题讨论】:

  • 不清楚你在问什么。如果只是关于 SQL,为什么要引用 C# 和 LINQ?另外,什么版本的 SQL Server? 2008+ 具有特定于此问题的数据类型。
  • 对不起,这是一个错误,我删除了那些标签,谢谢
  • 什么版本的 SQL Server? SQL Server 2008 引入了单独的 DATETIME 数据类型。
  • 我忘了提到我有波斯日期,例如我们有 6 个月有 31 天和 5 个月有 30 天,没有月份有 28 天(但在英文日期你有 28 天的月份) .如果我保存像 1391/06/31 这样的日期会有问题吗?
  • 对于波斯日期,您将在本地遇到麻烦。不过,有些人已经提供了帮助功能,请参阅 herehere

标签: sql sql-server sqldatatypes


【解决方案1】:

如果需要存储日期,可以使用date 数据类型。同样,您可以使用 time 数据类型。

要计算差异,您可以使用返回两个日期之间差异的DATEDIFF() sql 函数:http://msdn.microsoft.com/en-us/library/ms189794.aspx

我建议不要将您的数据存储为 stringint 等。按预期使用数据类型。

【讨论】:

  • 谢谢,时间呢?是否也有内置的时间比较功能?
  • @Simon 不,你不能在新的 2008+ 类型上使用简单的算术:Msg 8117 ... Operand data type time is invalid for subtract operator. 另外,你为什么要宽恕converting to varchar without specifying a length
  • @AaronBertrand,对不起,你是对的。最好使用DateDiff函数。
【解决方案2】:

为了存储数据,您可以使用日期类型或时间类型。一旦你这样做了,TimeSpan 结构就可以用来(在你的应用程序中)测量时间/日期的差异。如果您从另一个日期中减去一个日期,那么您将收到一个 TimeSpan 对象。

var difference = Date1.Subtract(Date2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 2012-06-02
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2019-12-06
    • 2017-10-30
    • 2016-03-07
    相关资源
    最近更新 更多