【问题标题】:Time DataType in Sql Server 2005Sql Server 2005 中的时间数据类型
【发布时间】:2010-03-22 09:49:33
【问题描述】:

我在SQL Server 2008 下创建了小型数据库。现在我想把它移到SQL Server 2005 并且它不起作用,因为它没有Time 数据类型。我必须在 SQL Server 2005 中仅存储时间的选项。我编写了小型 TimeSheet 应用程序,它需要以 05:30:00 (hh:mm:ss) 等格式写入小时和分钟,但 ss 是可选的。

【问题讨论】:

  • 谢谢。我必须修复 C# 应用程序以改用 DateTime 或安装我不喜欢的 SQL Express。
  • 我很好奇你为什么只想要时间。如果您需要时间之间的差异,您可以存储整个日期和时间并使用 Timespan 函数。也许这不是您想要的,但我不知道您要做什么。
  • 我存储了大约 3 小时 30 分钟。我不需要日期,因为用户不应该输入 StartTime 和 EndTime,而只是他在一天中花费的时间(我已将日期存储在不同的字段中)。然后我可以在 Time 上使用SUM()(不是真正的 SUM,而是我自己用 SQL 制作的)。
  • 希望这将告诉您为什么在与生产版本不同的数据库版本中进行开发是一种糟糕的做法。您应该使用 prod 中所需的最低版本进行开发。
  • 到目前为止,我的其他应用程序(即 100k 行)没有出现这个问题。这是一个简单的 2 天代码,所以不是什么大问题。没想到 SQL 2005 中缺少这个小功能:-)

标签: sql-server-2005 sql-server-2008 types


【解决方案1】:

SQL Server 2005 确实支持 DATETIME 数据类型,它还包括时间。要仅存储时间,可以使用 CONVERT 语句:

SELECT CONVERT(DATETIME, '11:22:33')

这不是最优的,因为没有使用日期部分,但仍然占用存储空间。但话又说回来,将数据库降级到以前的版本从来都不是最佳选择。

【讨论】:

    【解决方案2】:
    • 无。开箱即用。
    • 使用基于 CLR 的自定义类型自行完成。
    • 忍受它。

    对于时间表,我个人不希望有时间字段,而是始终将时间存储为 DateTime - 使查询更容易。

    【讨论】:

      【解决方案3】:

      遗憾的是,SQL Server 2005 中没有 Time 数据类型。我建议将现有数据转换为 SQL Server 2005 实例的方法是使用如下内容:

      Select CONVERT(DateTime, YourDateTimeColumn, 114) AS [HH:MI:SS:MMM(24H)]
        From YourTable
      

      这将为您提供当前日期和现有数据中的时间。在检索数据时,您将不得不以某种方式剥离时间的日期。这可以使用 C# 中的 Format 函数(或您可能正在使用的任何 .NET 语言......假设您正在这样做)来完成

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        相关资源
        最近更新 更多