SQL:搜索记录时比较日期
在SQL中,比较日期是过滤记录的广泛使用和非常基本的方法。很容易做吗?是的。执行SQL日期比较的一些最常见的方法是什么?您需要注意哪些潜在问题?我们将在此博客文章中回答这些问题。
而我们在主题上,你想在只六天内学到SQL?
基本日期比较
首先,让我们来看看最基本的方式来比较SQL中的日期。
假设您有一个名为“学生”的表,其中包含标有“生日”的专栏,您希望在1992年7月1日之后找到所有出生的学生。最简单的方法方式是这样的:
选择*来自生日快乐>'1992-07-01'的学生
这将列出生日是1992年7月1日之后的每个学生。
细看
相当简单,对吧?但请注意几件事。
首先,看看日期。它假设生日列中的数据是标准日期格式(YYYY-MM-DD)。您需要了解您比较日期的实际格式;我们将查看日期格式和数据类型的一些方式可以影响此帖子的日期比较。目前,请记住日期格式。
现在看看比较运算符>(“大于”)。正如它所致,查询将返回1992年7月2日或以后出生的学生。如果您想在1992年7月1日出生的学生中,您需要将运营商更改为> =(“大于或等于”):
从生日> ='1992-07-01'中选择*
或者更改目标日期至1992年6月30日:
选择*来自生日的学生>'1992-06-30'
比较的其他方式
当然,您可以使用其他运营商比较日期。假设您想在1992年7月30日至1994年6月30日之前找到所有从1992年7月30日出生的学生。您可以这样做:
从生日> ='1992-07-01'和生日<='1994-06-30'中选择*
但您也可以使用运营商之间:
从“1992-07-01”和1994-06-30'之间的生日之间的学生选择*
并观看这种格式
我们提到了一点更早的格式。Yyyy-MM-DD日期是标准的SQL数据类型,但还有其他方式表示SQL中的日期,以及对语言的所有版本不常见的SQL使用日期格式的许多方言。
添加到日期存储为字符串,整数或其他非日期数据类型的所有数据库以及代表日期的所有区域和国家变化以及比较SQL查询中的日期的过程可能会变得超过有时很复杂。
日期或日期和时间?
考虑,例如,DateTime数据类型。这足以使您很有可能遇到它 - 例如,它是MySQL和MySQL和Microsoft SQL Server.。它不仅仅是日期,还有时间:Yyyy-mm-dd hh:mm:ss,其中hh是小时,mm是几分钟,ss是秒。请注意,HH使用24小时 - 范围为00至23.一秒钟的小数点,其上限为.997。在SQL Server DateTime格式中午夜之前的最后一个可能时刻为23:59:59.997。)
在日期比较查询中是什么意思?
考虑我们早些时候的示例,我们正在寻找1992年7月1日或之后出生的所有学生:
从生日> ='1992-07-01'中选择*
如图所示,它无法使用DateTime,因为它不包括数据的时间部分。
制作DateTime工作
此查询将工作:
选择*来自生日> ='1992-07-01:00:00:00'的学生
但小心点。以下DateTime查询不会捕获1992年7月1日至1994年6月30日起出生的所有学生:
选择*来自生日> ='1992-07-01:00:00:00'和生日<='1994-06-30:00:00:00'的学生
If the TIME part of the BIRTHDAY column’s DATETIME data contains times other than 00:00:00, the query will miss anyone born after 00:00:00 on June 30, 1994. A student whose birthday is in the database as 5:37:00 on June 30, 1994, for example, would not be picked up by the query as shown.
另一方面,此DateTime查询将工作:
选择*来自生日> ='1992-07-01:00:00:00'和生日<='1994-06-30:23:59:59'
或者,当数据包括第二个SQL Server样式分数:
选择*来自生日> ='1992-07-01:00:00:00'生日<='1994-06-30:23:59:59.997'
字符串和其他东西
但是,如上所述,日期并不总是以标准或半标标SQL日期格式存储。一个日期可以存储为字符串:'19920701'是表示作为字符串的日期的完全合理的方法。
有些方法可以将这样的字符串转换为日期;Oracle SQL.例如,具有to_date函数,可以将表示各种日期格式的字符串转换为标准日期格式数据。
您可以使用to_date('19920701','yyyymmdd')以日期格式将字符串'19920701'转换为“1992-07-01”。
但是,在处理字符串和其他格式的日期时,您必须要小心,因为不同的国家和地区对代表日期有不同的约定。虽然美国使用MM / DD / YY或MM / DD / YYYY,英国和法国使用DD / MM / YY或DD / MM / YYYY,而日本使用YY / MM / DD或YYYY / MM / DD,提及只有几个例子。
基于使用错误的面具转换为日期格式的日期搜索查询不太可能工作;它可能会产生错误,或者在最不糟糕的搜索结果中产生错误。
你从这里去哪里?
SQL Date比较以及SQL查询一般来说,对程序员的需求很大实用的SQL技能。您可以找到各种各样的在线课程,从基本上到达SQL,教授您的一切最具技术上复杂的主题,包括如此高级需求科目高级Oracle SQL.。