【问题标题】:SQL Timstamp FunctionSQL 时间戳函数
【发布时间】:2010-05-26 22:39:15
【问题描述】:

这两个查询有什么区别吗?

select * from tbl where ts < '9999-12-31-24.00.00.000000';

select * from tbl where ts < timestamp('9999-12-31-24.00.00.000000');

什么时候需要时间戳功能? 性能有区别吗?

【问题讨论】:

    标签: sql performance db2 timestamp


    【解决方案1】:

    如果ts是字符串类型:

    • 第一个是比较类似的字符串
    • 第二个将导致 ts 转换为日期/时间

    如果 ts 是日期/时间类型,

    • 第一个会将常量转换为与 ts 列相同的日期时间类型
    • 第二个是比较日期/时间

    如果 ts 是字符串类型,第二个是最差使用的,因为 ts 将被转换,从而使任何索引无效。

    如果 ts 是日期/时间,则没有区别

    数据类型优先级适用于大多数数据库引擎

    【讨论】:

      【解决方案2】:

      乍一看,第一个语句会进行字符串比较,而第二个语句应该进行日期相关的比较。

      【讨论】:

        【解决方案3】:

        这取决于您的 SQL 实现,尽管假设“ts”列是某种日期/时间类型,但实际上没有区别。

        大多数 SQL 实现都有一个转换映射,它指示引擎如何自动转换符合某种模式的数据类型,尤其是在字面比较没有意义的情况下。例如,从字面上比较时间戳和字符串没有多大意义。但是,大多数引擎都有一个映射,可以让它知道格式为日期的字符串可以自动转换为时间戳,以便与另一个时间戳进行比较。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-17
          • 2021-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-21
          相关资源
          最近更新 更多