SQL标记函数

SQL标记函数,sql,performance,db2,timestamp,Sql,Performance,Db2,Timestamp,这两个查询之间有什么区别吗 select * from tbl where ts < '9999-12-31-24.00.00.000000'; 从tbl中选择*,其中ts

这两个查询之间有什么区别吗

select * from tbl where ts < '9999-12-31-24.00.00.000000';
从tbl中选择*,其中ts<'9999-12-31-24.00.00.000000';

从tbl中选择*,其中ts
何时需要时间戳功能?
性能有差异吗?

乍一看,第一条语句将进行字符串比较,而第二条语句应进行日期相关比较。

乍一看,第一条语句将进行字符串比较,而第二条语句应进行日期相关比较。

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


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

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


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

如果ts是字符串类型:

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

  • 第一个将常数转换为与ts列相同的日期时间类型
  • 第二个是比较相似的日期/时间
如果ts是字符串类型,则第二个最不适合使用,因为ts将被转换,从而使任何索引无效

如果ts是日期/时间,则没有差异


如果ts是字符串类型,则数据类型优先级适用于大多数DB引擎

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

  • 第一个将常数转换为与ts列相同的日期时间类型
  • 第二个是比较相似的日期/时间
如果ts是字符串类型,则第二个最不适合使用,因为ts将被转换,从而使任何索引无效

如果ts是日期/时间,则没有差异

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

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