【问题标题】:Error while finding the time difference in SQL Sybase using DATEDIFF function使用 DATEDIFF 函数在 SQL Sybase 中查找时差时出错
【发布时间】:2020-03-23 20:09:30
【问题描述】:

我有以下查询以分钟为单位查找两个日期之间的差异。

SELECT DATEDIFF(MINUTE,'28.11.2019 09:23:41:202',GETDATE()) AS time_difference

但是,我得到了错误

无法将“28.11.2019 09:23:41:202”转换为时间戳 SQLCODE = -157,ODBC 3 状态 = "07006"

值 '28.11.2019 09:23:41:202' 是通过在上一个查询中使用 GETDATE() 函数获得的。 这里有什么问题?有什么帮助吗?

更新:

如果值“28.11.2019 09:23:41:202”更改为“2019.11.28”格式,则查询有效。如上所述,

值“'28.11.2019 09:23:41:202'”是通过在上一个查询中使用相同的函数 GETDATE() 获得的。

【问题讨论】:

  • 请试试这个SELECT DATEDIFF(MINUTE,'2019-11-27 08:55:12:564',GETDATE()) AS time_difference
  • @jishansiddique 谢谢吉山..这行得通!但是,要获得 YYYY-MM-DD 格式的值,我需要做一些额外的转换。此外,日期“27.11.2019 08:55:12:564”是使用相同的 GETDATE() 函数获得的。
  • 您的 SQL 客户端正在以某种方式格式化 getdate() 如果您通过 isql 运行它,您会看到类似于“Nov 28 2019 6:58AM”。使用 DD.MM.YYYY 格式很糟糕,因为根据区域设置,月份和年份可能会颠倒过来,并且会遇到语法问题。例如,在英国我们使用 DD.MM.YYYY,但在美国他们假设为 MM.DD.YYYY。

标签: tsql sybase


【解决方案1】:

来自Official documentation的示例:

SELECT DATEDIFF(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

【讨论】:

    【解决方案2】:

    您需要使用标准的日期时间格式,它才能工作。例如,请参阅以下查询:

    select DateDiff(minute, '2019-11-28 08:12:34', GetDate()) as time_difference
    

    【讨论】:

    • 感谢您的回答。我知道我必须使用格式 YYYY-MM-DD 而不是 DD-MM-YYYY。但是,值“27.11.2019 08:55:12:564”是在之前的查询中使用 GETDATA() 函数获得的。那么,如果我想用它来查找差异,那么我必须进行转换吗?
    • 感谢您的反馈。如果这解决了您的问题,请将其标记为已接受的答案。
    • 日期格式YYYY-MM-DD还是有问题的。我可以使用的日期时间戳的格式是我的问题。
    • 我认为问题可能是毫秒,应该有一个句号将它与秒分开,在你的例子中你有一个冒号。您已将 '27.11.2019 08:55:12:564' 作为日期时间格式。应该是“27.11.2019 08:55:12.564”。
    • 我试过了..但这不是问题所在。问题在于日期格式。它仅适用于日期格式为 YYYY.MM.DD 而不是 DD.MM.YYYY
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2014-01-07
    • 2018-02-28
    • 1970-01-01
    • 2020-01-29
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多