Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中存储大致日期?_Mysql_Date - Fatal编程技术网

如何在MySQL中存储大致日期?

如何在MySQL中存储大致日期?,mysql,date,Mysql,Date,我需要存储日期,例如“1878年夏天”或“1923年6月初”,甚至“八月的一个星期二下午中旬”。你建议我怎么做 我考虑过将日期和时间分解为单独的(整数)列,并为每一列提供一个辅助(整数)列,其中包含一个范围(如果精确,则为0;如果未知,则为NULL)。但我相信还有其他方法 谢谢 我正在使用Postgres,我也想做同样的事情。如果MySQL有一些相似的几何类型,也许你可以用和我一样的方法来实现它:几乎无论你做什么,你几乎肯定无法让数据库为你完成繁重的工作。因此,您只有两个选择: 1-如您所述,使

我需要存储日期,例如“1878年夏天”或“1923年6月初”,甚至“八月的一个星期二下午中旬”。你建议我怎么做

我考虑过将日期和时间分解为单独的(整数)列,并为每一列提供一个辅助(整数)列,其中包含一个范围(如果精确,则为0;如果未知,则为NULL)。但我相信还有其他方法


谢谢

我正在使用Postgres,我也想做同样的事情。如果MySQL有一些相似的几何类型,也许你可以用和我一样的方法来实现它:

几乎无论你做什么,你几乎肯定无法让数据库为你完成繁重的工作。因此,您只有两个选择: 1-如您所述,使用自然字符串 2-存储精确的数据以及该日期的精度

例如,您可以存储“1975年9月23日下午5:10:23”,“正负6个月”,当有人想要搜索在该时间段内发生的记录时,这可能会弹出


这对查询没有帮助,因为据我所知,MySQL不提供任何公差支持(我知道的其他任何数据库也不支持)。基本上,您必须查询所有数据,然后自己过滤掉。

创建一个表,其中包含您可能需要的值列表,如“早期”或“夏季”。然后,无论您设置了什么数据,都可以使用一种算法,根据日期设置外键。

根据Chris Arguin的答案,在第二列中,只需另一个datetime列,您可以使用它来存储+/-,然后,您应该能够编写一个查询,使用这两列来获得大致的日期时间。

使用两个日期并确定模糊区域的开始和结束日期。对于类似Summer 1878的内容,输入18780621到18780920。对于1923年6月初,你必须决定早期结束的时间,可能是19230601到19230610。这样就可以根据这些值进行选择。之后您可能仍然希望进行筛选,但这将使您接近


对于那些没有年头的人,你必须找到一个不同的系统

由于“八月某个星期二的中午”(“La Grande Jatte岛上的一个星期日下午”?)没有指定年份,因此唯一真正的解决方案是列出所有日期和时间组件的表,所有这些组件都可以为空

另一方面,您正在合并数据

这里有两件事(当然是相关的):一个人类可读的字符串、日期描述和一系列可能的日期

如果至少可以指定一个范围,则可以执行以下操作:

create table artwork {
  artwork_id int not null primary key,
  name varchar(80),
  ... other columns
  date_description varchar(80),
  earliest_possible_creation_date datetime
  latest_possible_creation_date datetime
}

insert into artwork( 
  name, 
  date_description, 
  earliest_possible_creation_date, 
  latest_possible_creation_date
) values ( 

  'A Sunday Afternoon on the Island of La Grande Jatte',
  'Mid-afternoon on a Tuesday in August'
  '1884-01-01',
  '1886-12-31'
), (
  'Blonde Woman with Bare Breasts',
  'Summer 1878'
  '1878-05-01',
  '1878-08-31'
), (
   'Paulo on a Donkey',
   'Early June 1923',
   '1923-06-01'
   '1923-06-15'
);
这允许您显示所需内容,并搜索:

select * from artwork 
where @some_date between 
earliest_possible_creation_date and latest_possible_creation_date;

显然,“创作日期”(艺术家创作作品的日期)与“作品中描绘的日期”完全不同,如果后者可以确定的话。

我认为任何原生MySQL日期表示法都不适用于您。如果您的两列解决方案与Unix时间戳(使用
Unix\u TIMESTAMP()
函数生成,并以MySQL日期为参数),则该解决方案将运行良好。使用第二列(范围宽度)作为所选内容的上限和下限,并确保日期列已编制索引。

最后,我决定:为每个日期组件(年、月、日、小时、分钟、秒)设置一列,并为每个日期组件的范围设置相应的列(年范围、月范围、日范围、小时范围、分钟范围、秒范围),主要是因为此方法允许我指定我确定某张照片拍摄于60年代末的8月(例如)(年=1868,年范围=2,月=8,月范围=0)


感谢大家的帮助!

这取决于您计划如何使用和查询此信息。如果您能提供此信息,我们将能够更好地帮助您。这是一个旧照片目录,我的目标是找到一种按时间顺序排序的好方法,因为通常没有明确的时间顺序(!)--datetime类型加上第二个datetime类型(范围为+-1年、+-6小时等)是我最接近的。我认为这种开始日期和结束日期结构是可行的。它似乎是最简单、最不具假设性的。按两个日期之间的中点排序,你认为呢?(我必须说,您的数据示例非常合适!)我认为日期范围的人工术语列表对于用户选择日期非常有用(但我认为基本存储的日期应该是硬的和快速的日期时间)。