我想知道是否有办法在PostreSQL中的正确日期转换日期字段上的任何正则表达式。
我想将此“WHERE”语句转换为正确的时间戳比较:
WHERE date::text ~ '2013-0[1-9]-(0[1-9]|1[0-5])'
事实是这真的很慢。我猜是因为pgsql时间戳不是用于文本正则表达式搜索。
但是,在html字段中编写正则表达式对于我来说比使用javascripts小部件要容易得多。正则表达式也更加灵活。
我采取任何解决方案或建议
谢谢,
答案 0 :(得分: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
是一个可怕的名字。首先是因为它也是一个保留字,其次(更重要)因为它没有记录列包含的内容。