加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在数据库中存储部分日期

发布时间:2020-12-12 07:26:38 所属栏目:MsSql教程 来源:网络整理
导读:我想在关系数据库( MySQL,PostgreSQL等)中存储部分日期.例如,输入可能只是年份(2013年);年和月(2013-08);或年,月,日(2013-08-29).我不能只使用正常的DATE类型,因为年份将扩展到2013-01-01,这与年,月和日无法区分. 我想到要么将日期分成三个单独的字段(年,日作
我想在关系数据库( MySQL,PostgreSQL等)中存储部分日期.例如,输入可能只是年份(2013年);年和月(2013-08);或年,月,日(2013-08-29).我不能只使用正常的DATE类型,因为年份将扩展到2013-01-01,这与年,月和日无法区分.

我想到要么将日期分成三个单独的字段(年,日作为整数),但我在DBS中丢失所有日期细节并且必须管理更多的指标.

我的另一个想法是将它存储为DATE,并有另一个专栏说明日期是多么精确.例如,’2013-08-01’和’month’表示日期仅精确到月(2013-08). ‘2013-08-01’和’day’表示日期完全是2013-08-01.

最好的方法是什么?

解决方法

我认为有两种可能的方法:

(1)存储日期的子串,如:

'2013'               -- year 2013 
'2013-01'            -- year 2013,January
'2013-01-01'         -- year 2013,January 1

(2)存储3个不同的列,年,日(并且您可以构建索引年月日,没有问题)

2013  null  null     -- year 2013 
2013     1  null     -- year 2013,January
2013     1     1     -- year 2013,January 1st

哪一个最好取决于您想如何查询数据.假设您有存储过程,并且您希望传递参数以使所有行都进入条件状态.

在情况(1)中,您将字符串@Date =’2013-01’作为参数传递,并且您希望获得year = 2013和month = 01的所有行.因此where子句将是:

where left(Date,len(@Date)) = @Date

如果是(2),则传递三个参数 – @ Year = 2013,@ Month = 1,@ Day = null,where子句类似于:

where
    Year = @Year and -- Supposing @Year is always not null
    (@Month is null or @Month is not null and Month = @Month) and
    (@Day is null or @Day is not null and Day = @Day)

它可能更复杂,具体取决于您希望如何处理行.例如,如果您提供类似2013-01的参数,是否要获取其中month = null的行?

另一方面,如果你想通过日期并检查它是否属于日期范围,那么Gordon Linoff建议是一个很好用的建议.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读