SQL 类型转换日期:定义和应用

导航至

本文是关于 SQL “cast as date” 函数的指南。这个函数是做什么的,为什么你应该关注使用它?

当与数据库一起工作时,时间和日期操作是日常任务。有趣的是——或者可能不是那么有趣——你并不总是能找到以正确的日期格式表示的日期。在这种情况下,你必须进行类型转换或转换为日期格式,这正是本文的主题。

我们首先会解释如果你要跟随本指南,需要满足哪些先决条件。然后,我们将对 SQL 中的 CAST 函数进行概述。你将了解 SQL “cast as date” 的含义,该函数的工作原理以及其语法的细节。

之后,你将了解该函数的常见用例。最后,我们将展示如何使用该函数的更多细节。

先决条件

要跟随本文,你必须遵守以下两个先决条件

现在,我们就开始吧。

SQL 中“cast as date”是什么意思?

SQL 中“cast as date”到底是什么意思?好吧,类型转换是一种操作,通过它你可以将给定数据类型中的值转换为另一种类型。(这不仅适用于关系数据库的上下文,也适用于编程。)不出所料,你想要转换的值需要与目标类型兼容。例如,如果你想将文本转换为日期,文本必须遵循有效的数据格式。

In SQL,CAST 是一个函数。你可以将值转换为不同的类型,与日期和时间相关的类型也不例外。CAST 函数的语法非常简单

CAST ( expression AS data_type [ ( length ) ] )

简要说明

  • 表达式 是你想要转换的值
  • 数据类型 指的是你想要将表达式转换到的类型
  • 长度 是可选的,指目标类型的长度

现在你已经熟悉了这些术语,让我们继续探讨它们的重要性。使用这个函数的动机是什么?这就是我们接下来要了解的。

SQL “转换为日期”的主要用例

将值转换为日期有几种有趣的用例。考虑到这一点,我在这里使用“转换为日期”这个术语非常宽松,指的是任何将值转换为日期或相关类型的操作。很快你就会看到,有一个替代的CAST函数,以下的一些用例将使用这个替代函数。

  • 日期格式化:可以将值转换为以所需的格式进行显示的日期,或者甚至指定解析文本格式日期时的给定格式。

  • 日期比较:可以使用CAST函数将值转换为日期,然后执行比较。

  • 提取日期的组成部分:你经常会遇到包含日期和时间的值,但只想获取其中之一。可以将该值转换为只包含所需组件的新值。

使用SQL“转换为日期”

现在我们已经了解了基础知识,让我们现在向你展示如何在实践中使用SQL的CAST函数。我们将以问答的形式进行,将常见使用场景作为问题提出,然后回答它们。

如何将字符串转换为日期?

SQL“转换为日期”操作最常见的使用场景可能是想要将字符串转换为日期格式。让我们首先介绍如何将包含ISO 8601格式的日期的简单字符串转换为日期类型。

SELECT CAST('2023-09-25' AS date) AS MyDate

这就是结果

MyDate
2023-09-25

这看起来可能没什么。毕竟,它和原始值完全一样。但是,你必须理解函数返回的值是日期类型,这意味着你可以使用它进行日期计算。比如说,你想将10天加到结果日期上。这是你该怎么做

SELECT DATEADD(Day, 10, CAST('2023-09-25' AS date)) AS MyDate

如何在SQL中将今天的日期转换为日期?

在SQL Server中,如果你想检索当前日期,你必须使用名为GETDATE的函数。

SELECT GETDATE() AS Now

如果你运行上面的查询,你会看到它不仅返回当前日期,还返回时间。这是因为函数的返回值是datetime类型,它包含这两个组件。如果只想获取日期怎么办?如果是这样,你可以很容易地将返回值转换为日期。

SELECT CAST(GETDATE() AS date) AS Today

现在,假设你只想获取时间组件。在这种情况下,你会将返回值转换为时间。

SELECT CAST(GETDATE() AS time) AS Now

如何将字符串转换为不同格式的日期?

当然,我们人类不能就使用哪种日期格式达成一致,结果出现了无数相互竞争的格式。你经常需要将字符串转换为日期、时间或datetime值,但字符串中的日期并不遵循ISO 8601格式。你该如何解决这个问题呢?

幸运的是,SQL Server有解决方案,那就是CONVERT函数。让我们看看一个例子

SELECT CONVERT(datetime, '25/09/2023', 103) AS MyDate

这个函数看起来不难理解——唯一神秘的部分是末尾的103。让我们逐一解释其参数

  • datetime: 这是转换的目标类型。

  • ‘25/09/2023’: 这是我们要转换的日期,格式为 dd/mm/yyyy

  • 103: 这是用于确定转换格式的样式。

要查看所有可用的样式列表,您可以参考 Microsoft 的文档

cast-function

SQL 中的“转换为日期”与“转换日期”有何区别?

您可能会 wonder: SQL 中的“转换为日期”与 CONVERT 函数之间有什么区别?毕竟,它们不是做同样的事情吗?

功能上存在差异,就像您刚才看到的。但最显著的差异是,CAST 函数属于 ANSI SQL 规范,而 CONVERT 是 SQL Server 特有的。

总结

如您所见,SQL “转换为日期”只是指在 SQL 中使用 CAST 函数将值转换为优化处理日期的日期类型。这种操作有很多有用的应用:通过将值转换为 日期时间datetime 类型,您可以对它们执行有用的操作,例如时间算术。

转换还可以用于格式化目的,甚至可以用来从值中提取特定组件,例如从 datetime 值中获取仅时间。

如您所见,CAST 函数具有简单的语法,并且使用起来相当直观。它也有些受限——当您遇到稍微复杂一些的场景时,您可能想要使用 CONVERT 函数。

其他资源