【问题标题】:comparing date in pl/sql比较 pl/sql 中的日期
【发布时间】:2020-11-27 16:59:19
【问题描述】:

我想编写一个以年份为参数的函数,并返回该年出生的人。但是我的人员表格式如 1993-01-06 00:00:00 那么如何比较日期并在 sql 中返回过滤后的人员?

【问题讨论】:

  • 你的表中这个“日期”的数据类型是什么?如果它不是 DATE,那么你有一个严重的设计失败,应该纠正。如果它不是 DATE,则有两个人向您展示了如何处理它,但这不应被理解为对该设计的认可。如果它不是 DATE,那么您对格式以及如何解释它有 保证。

标签: sql oracle date


【解决方案1】:

假设您的表有一个具有DATE 数据类型的列,那么:

SELECT *
FROM   table_name
WHERE  date_column >= TO_DATE( :year || '-01-01', 'YYYY-MM-DD' )
AND    date_column <  TO_DATE( ( :year + 1 ) || '-01-01', 'YYYY-MM-DD' );

(使用日期范围而不是在日期列上使用 EXTRACTTO_CHAR,因为这允许 Oracle 在日期列上使用索引。)

如果您的列具有 4 位年份的字符串数据类型:

SELECT *
FROM   table_name
WHERE  string_column LIKE :year || '-%'

(不要只连接 %,因为如果您有历史年份,那么尝试匹配年份 200 也会匹配年份 2000。)

【讨论】:

    【解决方案2】:

    如果a列的数据类型是字符串,那么可以使用:

    where col like :year || '%'
    

    如果数据类型是日期或时间戳,则可以使用:

    where extract(year from col) = :year
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多