0

我想知道是否有办法在 PostreSQL 中将日期字段上的任何正则表达式转换为适当的日期。

我想将此“WHERE”语句转换为适当的时间戳比较:

WHERE date::text ~ '2013-0[1-9]-(0[1-9]|1[0-5])'

事实是这真的很慢。我猜是因为 pgsql 时间戳不是为文本正则表达式搜索而制作的。

但是,在 html 字段中编写正则表达式比使用大量 javascripts 小部件更容易开发。正则表达式也更加灵活。

我采取任何解决方案或建议

谢谢,

4

1 回答 1

1

知道“html 字段”和 JavaScript 小部件是什么意思。那是一个纯 SQL 问题。

但无论如何,如果我正确理解了正则表达式,这应该有效:

where extract(year from "date") = 2013
  and extract(month from "date") between 1 and 9
  and extract(day from "date") between 1 and 15

虽然只有在某些表达式上创建基于函数的索引才会更快,否则也会进行全表扫描。以下索引可能有助于加快速度(假设条件大大减少了行数)

create index idx_year 
    on foo (extract(year from "date"), 
            extract(month from "date"), 
            extract(day from "date"));

另一种选择可能是:

where "date" between DATE '2013-01-01' and DATE '2013-09-15' 
  and extract(day from "date") <= 15

顺便说一句:date是一个可怕的列名称。首先是因为它也是一个保留字,其次(也是更重要的)因为它没有记录该列包含的内容。

于 2013-09-25T09:27:44.090 回答