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

Cách chuyển đổi giữa các định dạng ngày trong SQL Server bằng CAST ()

Trong SQL Server, bạn có thể sử dụng CONVERT() chức năng chuyển đổi giá trị ngày từ kiểu dữ liệu ngày này sang kiểu dữ liệu ngày khác (hoặc giữa bất kỳ kiểu dữ liệu nào khác cho vấn đề đó). Tuy nhiên, đó không phải là chức năng duy nhất trong hộp công cụ T-SQL để chuyển đổi giữa các kiểu dữ liệu.

CAST() hàm là một phần của tiêu chuẩn ANSI SQL và nó thực hiện hầu hết những điều CONVERT() làm. Vì vậy, trong nhiều trường hợp, bạn có tùy chọn trong số các chức năng này mà bạn thích sử dụng.

Nhiều chuyên gia cơ sở dữ liệu thích CAST() do thực tế là nó là một phần của tiêu chuẩn ANSI SQL, tuy nhiên, những người khác thích CONVERT() do chức năng bổ sung mà việc triển khai của T-SQL cung cấp (chẳng hạn như có thể cung cấp kiểu ngày tháng).

Trong mọi trường hợp, bài viết này cung cấp các ví dụ về chuyển đổi giữa các định dạng ngày tháng khác nhau bằng cách sử dụng CAST() .

Cú pháp

Cú pháp như sau:

CAST ( expression AS data_type [ ( length ) ] )

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 .

Ví dụ 1 - Truyền SYSDATETIME () dưới dạng ngày

Trong ví dụ này, chúng tôi tạo ngày / giờ hiện tại với SYSDATETIME() hàm và truyền giá trị trả về dưới dạng 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,
    CAST(SYSDATETIME() AS date) AS Converted;

Kết quả:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-07 00:15:32.9265884 | 2018-06-07  |
+-----------------------------+-------------+

Ví dụ 2 - Truyền SYSDATETIME () dưới dạng smalldatetime

Trong ví dụ này, chúng tôi chọn ngày dưới dạng smalldatetime kiểu dữ liệu.

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

Kết quả:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 |
+-----------------------------+---------------------+

Ví dụ 3 - Truyền SYSDATETIME () dưới dạng datetimeoffset

Trong ví dụ này, chúng tôi chọn ngày dưới dạng datetimeoffset kiểu dữ liệu.

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

Kết quả:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 |
+-----------------------------+------------------------------------+

Ví dụ 4 - Truyền SYSDATETIME () theo thời gian

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ể truyền nó dưới dạng 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,
    CAST(SYSDATETIME() AS time) AS Converted;

Kết quả:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 |
+-----------------------------+------------------+

Ví dụ 5 - Truyền SYSDATETIMEOFFSET () dưới dạng ngày

Dưới đây là một ví dụ sử dụng một hàm khác để tạo giá trị ngày / giờ ban đầu:

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

Kết quả:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

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

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

USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CAST(LastEditedWhen AS date) 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  |
+-----------------------------+-------------+

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 CONVERT() 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. Ràng buộc kiểm tra chồng chéo phạm vi ngày

  2. Mệnh đề WHERE IS NULL, IS NOT NULL hoặc NO WHERE tùy thuộc vào giá trị tham số SQL Server

  3. Kết nối SQL Server với cơ sở dữ liệu Java

  4. Làm cách nào để chỉ chọn các hàng đầu tiên cho mỗi giá trị duy nhất của một cột?

  5. Nhận các giá trị ranh giới cho một bảng được phân vùng trong SQL Server (T-SQL)