目录

1. 你想做什么
2.环境
3.研究
 3-1. 仅日期
  (1) 左功能
  (2) SUBSTRING 函数
  (3) CAST 函数
  (4) 转换功能
  (5) 奖励:我想把它变成一个斜线
  (6)补充:CAST和CONVERT函数的区别
 3-2. 仅限时间
4.最终代码
5. 参考
6. 最后

1. 你想做什么

SQLServer 中的表有一个日期时间列。

数据类型是日期时间。

【SQLServer】datetimeを分割して取得する

日期时间格式如下。
YYYY-MM-DD hh:mm:ss[.nnn]

【SQLServer】datetimeを分割して取得する

这次以某种方式使用现有数据我想将日期和时间分开,所以我做了一些研究并将其放在一起。
示例:分为2022-10-04 6:56:242022-10-0406:56:24

2.环境

  • windows 10 版本 21H2
  • 微软-IIS 10.0
  • Microsoft SQL Server Management Studio 18.12.1

3. 调查

我尝试使用不同的函数来查看结果。

3-1. 仅日期

(1) 左功能

我试图通过指定前 10 个字符(包括连字符)来获取 2022-10-04

<执行的 SQL>

SELECT
id,
name,
LEFT(time, 10) AS '日付'
FROM test_DB

<结果>
我能够得到10 04 2022

【SQLServer】datetimeを分割して取得する

(2) SUBSTRING 函数

剪切并返回指定字符串的函数。我试过了,因为它可以与 SQLServer 和 MySQL 一起使用。

SUBSTRING 函数
SUBSTRING([string], [cut start point], [number of characters to cut]);

  • 第一个参数:字符串
  • 第二个参数:切割起点
  • 第三个参数:要剪切的字符数

<执行的 SQL>

SELECT
id,
name,
SUBSTRING(time, 1, 10) AS '日付'
FROM test_DB

<结果>
我收到一条错误消息,提示“参数的数量不对应”。
【SQLServer】datetimeを分割して取得する

由于第一个参数是字符串,因此必须将其转换为字符串一次。

通过使用 CAST 函数将其转换为字符串并将其用作第一个参数来解决该错误。

CAST 函数
CAST(任何有效的表达式 AS 目标数据类型 [(数据类型长度)])
将一种数据类型的表达式转换为另一种数据类型。

<执行的 SQL>

SELECT
id,
name,
SUBSTRING(CAST(time AS nvarchar), 1, 10) AS '日付'
FROM test_DB

<使用 CAST 函数后的结果>
可以得到10 04 2022,与LEFT函数的结果相同。
【SQLServer】datetimeを分割して取得する

(3) CAST 函数

感觉在(2)中转换成字符串会很麻烦,所以想知道用CAST函数能不能一次性得到。

<执行的 SQL>

SELECT
id,
name,
(CAST(time AS date)) AS '日付'
FROM test_DB

在 (2) 中的 SUBSTRING 函数中,我们将其转换为字符串,但这次我们指定了日期。

<结果>
由于默认日期格式是YYYY-MM-DD,我能够得到2022-10-04

【SQLServer】datetimeを分割して取得する

(4) 转换功能

类似于 CAST 函数,作为将一种数据类型的表达式转换为另一种数据类型的函数
有一个转换功能。
我试图看看我是否可以使用 CONVERT 功能得到它。

转换功能
CONVERT((目标数据类型[(数据类型长度)]),任意表达式[,任意整数表达式,指定如何转换表达式])

<执行的 SQL>

SELECT
id,
name,
(CONVERT(date, time)) AS '日付'
FROM test_DB

<结果>
类似于 CAST 函数,我能够得到2022-10-04
【SQLServer】datetimeを分割して取得する

(5) 奖励:我想把它变成一个斜线

我能够实现仅从 datetime 类型数据中获取日期的目标,但我想知道是否可以将其设为斜线,例如 2022/10/04 而不是 2022-10-04

<执行的 SQL>

SELECT
id,
name,
(CONVERT(nvarchar, time, 111)) AS '日付'
FROM test_DB

<结果>
它是通过在 CONVERT 函数的末尾指定一个整数表达式来完成的。

转换功能
CONVERT((目标数据类型[(数据类型长度)]),任意表达式[,一个整数表达式,指定如何转换任意表达式])

您可以将 111 放在任何表达式之后,使其成为默认形式 yyyy/mm/dd
【SQLServer】datetimeを分割して取得する

(6)补充:CAST和CONVERT函数的区别

CONVERT 函数是 SQLServer 专有的,CAST 函数是符合 ISO 标准的。

3-2.仅限时间

时间可以使用与(5)中相同的公式获得。

<执行的 SQL>

SELECT
id,
name,
(CONVERT(nvarchar, time, 108)) AS '時間'
FROM test_DB

<结果>
您可以将 108 放入默认格式 hh:mi:ss
如果将其设置为 114,则最多可以达到毫秒 (hh:mi:ss:mmm)。

【SQLServer】datetimeを分割して取得する

4.最终代码

我可以使用 CONVERT 函数来拆分日期和时间。

SELECT
id,
name,
(CONVERT(date, time)) AS '日付',
(CONVERT(nvarchar, time, 108)) AS '時間'
FROM test_DB
【SQLServer】datetimeを分割して取得する

5. 参考

6. 最后

这一次,业务中有一个请求,所以我调查了各种功能。
如果有任何错误或意见,请告诉我。
感谢您的阅读。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308628609.html

相关文章: