活动表,日期存储及查询怎么设计

272 天前
 sunzy

活动的时间有几种形式:

  1. 年月日 2023/8/1 - 2023/8/15
  2. 月日 8/1 - 8/15
  3. 月份 3,4,8,9

要通过日期来查询和排序,如果只是日期查询还好一些,可以用一个日期->活动的索引表来解决,关键还有其他字段的查询。。。

1212 次点击
所在节点    MySQL
10 条回复
xuelang
272 天前
将开始日期和结束日期作为单独的字段存储。

```
CREATE TABLE activities (
id SERIAL PRIMARY KEY,
start_date DATE,
end_date DATE,
-- 其他字段
);
```

查询和排序:
SELECT * FROM activities
WHERE start_date >= '2023-08-01' AND end_date <= '2023-08-15'
ORDER BY start_date;
sunzy
272 天前
@xuelang 感谢回答,这种只能满足第一种形式
kongkx
272 天前
参考一下 ical data model 。 这几种形式可以配合类型标记,进行 Humanize 展示
sunzy
272 天前
@kongkx 多谢!我看看去~
xiaohundun
271 天前
把 yyyy-mm-dd 拆开都存下来呢
dode
271 天前
日期数据库归一化
sunzy
271 天前
@xiaohundun 跨年如何查询呢?
xiaohundun
271 天前
时间拆为年月日之后,用 between and 确定各个部份的范围不就好了么,如果不是范围那就用字面量条件,不挺简单,难道我没理解你的意思?
sunzy
271 天前
@xiaohundun 比如:12/1 - 2/1 这种可以用 between and ?
xiaohundun
271 天前
@sunzy 2-12 可以用,12-2 用不了但可以确定区间吧?处理一下变成 IN 查询不就行了,伪 sql:
month in (12,1,2) and day = 1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX