【问题标题】:Why doesn't sql compare times?为什么sql不比较时间?
【发布时间】:2017-06-07 09:37:11
【问题描述】:

如果它小于或大于彼此,我正在比较这 2 次,但事实并非如此。为什么 ?

 if(@OpeningTime < @ExpiryTime)
      Begin
            Raiserror('Opening time cannot be smaller than expiry time', 16,10);
            return
      End

两者都是 varchar(10) 类型

过去的时间是上午 10:00 和上午 11:00

【问题讨论】:

  • 当 SQL Server 具有完美的功能类型(例如 time)时,为什么要将这些存储为 varchar
  • SQL 确实比较时间,你告诉它比较 2 个字符串。
  • 这两个变量 OpeningTime 和 ExpiryTime 从哪里以及如何获得价值?

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

您实际上是在比较字符串,您需要先将VARCHAR 转换为TIME,然后再进行比较。

IF ( CONVERT(TIME, @OpeningTime) < CONVERT(TIME, @ExpiryTime) )

【讨论】:

  • CONVERT 是否保证在“上午 10:00”工作?例如,在德国,这不是有效时间,因为我们只使用 24 小时格式。不幸的是,我这里没有 SQL Server 可以试用。
  • @ThorstenKettner 刚刚在我的本地机器上进行了测试(运行 sql server 2012),当将 '10:00AM' 和 22:00:00.0000000 转换为 '10:00PM' 时,我得到了 10:00:00.0000000 但是无论如何,我个人是 24 次的粉丝 - 错误/误解的空间较小
  • @ThorstenKettner 作为后续我发现日期时间样式格式 109 和 130 特定于输出 12 小时格式。
  • 这个格式是官方统计的,你可以去没有问题
猜你喜欢
  • 2011-02-13
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多