如何通过创建日期在数据库中搜索个人资料
如何通过创建日期在数据库中搜索个人资料
我在数据库中有一个带有创建日期列(DATETIME)的个人资料。我需要在Java中实现按日期搜索个人资料的功能,以返回在特定日期或月份创建的所有个人资料。\n实现这个功能的最佳方法是什么?我考虑过添加新列(day,month,year)并按照它们进行搜索,但我不知道这是否是正确的方法。搜索应该快速且日期需要本地化。\n编辑:\n是的,这个查询(来自其他问题)是可以的:\n
SELECT * FROM profile WHERE DATE(creation_date) = '20190121';
\n我认为这里的问题是,在个人资料数量很大的情况下,这个查询可能会很慢,因为首先必须执行Date函数,然后对所有创建日期进行比较。这个解决方案似乎效率低下。我不确定添加更多列(day,month和year作为整数)是否会是更好的解决方案,或者是否可以使用索引。
问题出现的原因是需要在数据库中根据创建日期来搜索用户档案。下面是解决该问题的方法:
尝试以下代码:
Declare @startdate date ='1/1/2019' Declare @enddate date ='1/21/2019' Select * from tablename where cast(creationdate as date) between @startdate and @enddate
以上代码声明了两个日期变量`@startdate`和`@enddate`,分别表示搜索的起始日期和结束日期。然后使用`CAST`函数将`creationdate`字段转换为日期类型,并使用`BETWEEN`关键字来筛选出在指定日期范围内的用户档案。
通过以上方法,我们可以根据创建日期在数据库中搜索用户档案。
问题的原因是希望能够通过创建日期来在数据库中搜索个人资料,但不知道如何实现快速搜索以及如何处理本地化的日期。解决方法是在数据库中添加一个Datetime列来记录个人资料的创建时间,并添加一个timezone列来记录创建资料时所使用的时区。然后可以使用以下查询语句来搜索个人资料:
SELECT * FROM profile WHERE created_at = '?'
其中'?'是用户要搜索的日期。为了处理本地化的日期,可以使用以下查询语句:
SELECT * FROM profile WHERE CONVERT_TZ(created_at, 'GMT', profile_timezone) = '?'
其中'GMT'是服务器的时区(替换为实际的时区),profile_timezone是个人资料的时区。这样,当用户搜索个人资料时,返回的结果将根据创建时间的日期时间在用户所在的时区进行调整。这是否符合您的需求?