Sql 使用月份和年份查找范围数据

Sql 使用月份和年份查找范围数据,sql,postgresql,Sql,Postgresql,我有一个具有以下属性的表 lat, lng, month, y1, y2, y3, y4, y5... till y10. 这里y1=2001年的数据,y2=2002年的数据,同样适用于其余年份 我需要获取month1和y1到month2到y2的数据, 例:从2001年3月到2004年8月 是否可以使用BETWEEN函数获取数据? 我如何编写此场景的查询?任何帮助都是值得的 您的数据格式非常糟糕。这一点很明显,因为数据分布在列中。数据应该如下所示: month, year, lat, lng,

我有一个具有以下属性的表

lat, lng, month, y1, y2, y3, y4, y5... till y10.
这里y1=2001年的数据,y2=2002年的数据,同样适用于其余年份

我需要获取month1和y1到month2到y2的数据, 例:从2001年3月到2004年8月 是否可以使用BETWEEN函数获取数据?
我如何编写此场景的查询?任何帮助都是值得的

您的数据格式非常糟糕。这一点很明显,因为数据分布在列中。数据应该如下所示:

month, year, lat, lng, y
所以,一行应该是10。您可以在Postgres中执行此操作:

select t.month, u.ord + 2000 as year, t.lat t.lng, u.y
from t, lateral
     unnest(array[y1, y2, . . .]) with ordinality u(y, ord)
接下来,您可以将年/月转换为日期:

select to_date(u.ord + 2000 || '-' || t.month || '-01', 'YYYY-MM-DD') as yyyymmdd, t.lat t.lng, u.y
from t, lateral
     unnest(array[y1, y2, . . .]) with ordinality u(y, ord);
现在,您可以将其用作子查询,并在之间使用

select t.*
from (select to_date(u.ord + 2000 || '-' || t.month || '-01', 'YYYY-MM-DD') as yyyymmdd, t.lat t.lng, u.y
      from t, lateral
           unnest(array[y1, y2, . . .]) with ordinality u(y, ord)
     ) t
where yyyymmdd between '2003-04-01'::timestamp and '2005-06-01'::timestamp

添加一些示例表数据和预期结果,以及格式良好的文本。并向我们展示您当前的查询尝试。谢谢您的回答,我知道数据格式不好,无论如何,谢谢您的帮助。