Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách chuyển đổi từ định dạng ngày này sang định dạng ngày khác trong SQL Server bằng CONVERT ()

Đôi khi khi làm việc với cơ sở dữ liệu và các môi trường lập trình khác, bạn nhận được giá trị ngày nhưng nó ở định dạng / kiểu dữ liệu sai. Ví dụ:nếu một ngày đã được tạo bằng một hàm ngày có sẵn, thì nó có thể bao gồm cả ngày và giờ, cho đến tận nano giây cuối cùng. Và tất cả những gì bạn muốn là ngày, tháng và năm, giả sử như sau:2018-01-01.

Nếu điều này xảy ra khi bạn đang sử dụng SQL Server, bạn có thể sử dụng CONVERT() chức năng chuyển đổi nó sang một kiểu dữ liệu khác. Khi bạn làm điều này, kiểu dữ liệu sẽ xác định định dạng mà nó xuất hiện.

Bài viết này cung cấp các ví dụ về việc sử dụng CONVERT() trong SQL Server để chuyển đổi giá trị ngày tháng sang kiểu dữ liệu (ngày tháng) khác.

Cú pháp

Đầu tiên, đây là cách cú pháp chính thức hoạt động:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Các đối số này được định nghĩa như sau:

expression
Bất kỳ biểu thức hợp lệ nào.
data_type
Kiểu dữ liệu đích. Điều này bao gồm xml , bigint sql_variant . Không thể sử dụng kiểu dữ liệu bí danh.
length
Một số nguyên tùy chọn chỉ định độ dài của kiểu dữ liệu đích. Giá trị mặc định là 30 .
style
Một biểu thức số nguyên chỉ định cách CONVERT() hàm sẽ dịch biểu thức . Đối với giá trị kiểu là NULL, NULL được trả về. data_type xác định phạm vi.

Ví dụ 1 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu ngày

Trong ví dụ này, chúng tôi tạo ngày / giờ hiện tại với SYSDATETIME() và chuyển đổi nó thành ngày tháng kiểu dữ liệu.

Lưu ý rằng SYSDATETIME() tạo giá trị của nó dưới dạng datetime2 (7) kiểu dữ liệu, vì vậy chúng tôi đang chuyển đổi từ kiểu dữ liệu đó sang kiểu dữ liệu khác.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(date, SYSDATETIME()) AS Converted;

Kết quả:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-06 22:53:47.2318751 | 2018-06-06  |
+-----------------------------+-------------+

Ví dụ 2 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu smalldatetime

Trong ví dụ này, chúng tôi chuyển đổi ngày thành smalldatetime kiểu dữ liệu.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(smalldatetime, SYSDATETIME()) AS Converted;

Kết quả:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 |
+-----------------------------+---------------------+

Ví dụ 3 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu datetimeoffset

Trong ví dụ này, chúng tôi chuyển đổi ngày thành datetimeoffset kiểu dữ liệu.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;

Kết quả:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 |
+-----------------------------+------------------------------------+

Ví dụ 4 - Chuyển đổi từ kiểu dữ liệu SYSDATETIME () sang time

Bạn không bị giới hạn trong việc hiển thị thành phần ngày của giá trị. Bạn cũng có thể chuyển đổi nó thành thời gian kiểu dữ liệu, để chỉ thành phần thời gian được trả về. Như thế này:

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(time, SYSDATETIME()) AS Converted;

Kết quả:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 |
+-----------------------------+------------------+

Ví dụ 5 - Chuyển đổi từ SYSDATETIMEOFFSET ()

Các ví dụ trước đều sử dụng cùng một hàm có sẵn để tạo giá trị ngày / giờ, nhưng tất nhiên, nó không cần được tạo bởi một hàm này. Đây là một ví dụ sử dụng SYSDATETIMEOFFSET() :

SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;

Kết quả:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Ví dụ 6 - Chuyển đổi từ Truy vấn Cơ sở dữ liệu

Dưới đây là một ví dụ về chuyển đổi ngày được truy xuất từ ​​một cột trong cơ sở dữ liệu mẫu WideWorldImporters:

USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CONVERT(date, LastEditedWhen) AS 'Converted'
FROM Sales.CustomerTransactions;

Kết quả:

+-----------------------------+-------------+
| LastEditedWhen              | Converted   |
|-----------------------------+-------------|
| 2013-01-02 11:30:00.0000000 | 2013-01-02  |
| 2013-01-03 11:30:00.0000000 | 2013-01-03  |
| 2013-01-04 11:30:00.0000000 | 2013-01-04  |
| 2013-01-05 11:30:00.0000000 | 2013-01-05  |
| 2013-01-06 11:30:00.0000000 | 2013-01-06  |
| 2013-01-08 11:30:00.0000000 | 2013-01-08  |
| 2013-01-09 11:30:00.0000000 | 2013-01-09  |
| 2013-01-10 11:30:00.0000000 | 2013-01-10  |
| 2013-01-11 11:30:00.0000000 | 2013-01-11  |
| 2013-01-12 11:30:00.0000000 | 2013-01-12  |
+-----------------------------+-------------+

Lưu ý rằng bạn không bị giới hạn khi chỉ chuyển đổi giữa hai định dạng ngày khác nhau. Ví dụ:nếu bạn có một ngày được lưu trữ dưới dạng chuỗi, bạn cũng có thể sử dụng CONVERT() để chuyển đổi từ một chuỗi thành một ngày, cũng như bất kỳ loại dữ liệu nào khác mà bạn có thể cần chuyển đổi sang.

Tôi cũng đã viết một bài đăng hướng dẫn cách chuyển đổi giữa các định dạng ngày tháng bằng cách sử dụng CAST() sử dụng các ví dụ tương tự như trên.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 50 câu hỏi phỏng vấn máy chủ SQL hàng đầu bạn phải chuẩn bị vào năm 2022

  2. Nhận đặc quyền cột cho một bảng trong SQL Server bằng T-SQL:sp_column_privileges

  3. Cách NTILE () hoạt động trong SQL Server

  4. Thu thập dữ liệu tự động của các thay đổi lược đồ cơ sở dữ liệu trong MS SQL Server

  5. OLTP trong bộ nhớ:Có gì mới trong SQL Server 2016