Tìm hiểu về các tùy chọn khác nhau để lấy ngày hiện tại từ SQL Server và hiểu khi nào nên sử dụng tùy chọn này thay vì tùy chọn kia.

Bạn đang xem : ngày hôm nay tính bằng sql

Bởi: | Cập nhật: 2021-04-09 | Nhận xét (3) | Liên quan: Thêm & gt; Ngày

Vấn đề

Trong hướng dẫn này, chúng ta sẽ khám phá
các tùy chọn khác nhau để lấy ngày hiện tại từ SQL Server và hiểu khi nào sử dụng
tùy chọn khác.

Giải pháp

Có nhiều cách để lấy ngày hiện tại trong Máy chủ SQL bằng T-SQL và
các chức năng của hệ thống cơ sở dữ liệu. Trong hướng dẫn này, tôi sẽ chỉ ra các chức năng khác nhau, hãy thảo luận
sự khác biệt giữa chúng, đề xuất nơi sử dụng chúng làm Hướng dẫn Tham khảo SQL. Sau đó tôi sẽ trình bày một số
các ví dụ sử dụng mã.

Tùy chọn sử dụng

SQL Server cung cấp một số chức năng khác nhau trả về ngày hiện tại
thời gian bao gồm: GETDATE (), SYSDATETIME () và CURRENT_TIMESTAMP. GETDATE ()
và các hàm CURRENT_TIMESTAMP có thể hoán đổi cho nhau và trả về kiểu dữ liệu ngày giờ.

Hàm SYSDATETIME () trả về kiểu dữ liệu datetime2. Ngoài ra SQL Server
cung cấp các chức năng để trả về thời gian ngày hiện tại trong Giờ Phối hợp Quốc tế
hoặc UTC bao gồm các hàm ngày hệ thống GETUTCDATE () và SYSUTCDATETIME ().

SQL
Máy chủ cung cấp một chức năng bổ sung, SYSDATETIMEOFFSET (), trả về một
giá trị ngày giờ của hệ thống với độ lệch múi giờ hiện tại của Máy chủ SQL.

Bạn có thể sử dụng
CHỌN ĐÚC hoặc CHỌN CHUYỂN ĐỔI để thay đổi kiểu dữ liệu được các hàm này trả về Ngày tháng,
kiểu dữ liệu smalldatetime, datetime, datetime2 và ký tự. Dưới đây cho thấy độ chính xác
và phạm vi cho từng chức năng.

Dưới đây là so sánh các tùy chọn khác nhau.

Hàm số

Loại dữ liệu

Độ chính xác

Phạm vi

HẸN GẶP()

Ngày giờ

19 vị trí tối thiểu đến 23 vị trí tối đa; Làm tròn
đến gia số .000, .003 hoặc .007 giây

1753-01-01 đến 9999-12-31; 00:00:00 đến hết
23: 59: 59,997

DẤU THỜI GIAN HIỆN TẠI

Ngày giờ

19 vị trí tối thiểu đến 23 vị trí tối đa; Làm tròn
đến gia số .000, .003 hoặc .007 giây

1753-01-01 đến 9999-12-31; 00:00:00 đến hết
23: 59: 59,997

SYSDATETIME ()

Datetime2

27 tối đa (YYYY-MM-DD hh: mm: ss.0000000); 100 nano giây

0001-01-01 đến 9999-12-31; 00:00:00 đến hết
23: 59: 59.9999999

GETUTCDATE ()

Ngày giờ

19 vị trí tối thiểu đến 23 vị trí tối đa; Làm tròn
đến gia số .000, .003 hoặc .007 giây

1753-01-01 đến 9999-12-31; 00:00:00 đến hết
23: 59: 59,997

SYSUTCDATETIME ()

Datetime2

27 tối đa (YYYY-MM-DD hh: mm: ss.0000000); 100 nano giây

0001-01-01 đến 9999-12-31; 00:00:00 đến hết
23: 59: 59.9999999

SYSDATETIMEOFFSET ()

Datetimeoffset (n). n là giây phân số
độ chính xác và có thể nằm trong khoảng từ 0 đến 7. hh: mm: ss [.nnnnnnn]

YYYY-MM-DD hh: mm: ss [.nnnnnnn] [+ | -] hh: mm;

Giống như SYSDATETIME (): 2007-05-08 12: 35: 29.1234567
+12: 15; hh trong khoảng từ 00 đến 14 và mm trong khoảng từ 00 đến 59 và -14: 00
đến +14: 00

Tại sao lại sử dụng cái này thay cho cái kia?

Hàm GETDATE () được sử dụng phổ biến nhất trong nhóm các hàm.

Xem Thêm  The Simpsons/Season 7 - jasper report là gì

Có thể sử dụng hàm CURRENT_TIMESTAMP ở bất kỳ nơi nào có hàm GETDATE ()
Được sử dụng. Nó là ANSI tương đương với hàm GETDATE (). Cả hai đều trở lại
kết quả giống hệt nhau và thuộc kiểu dữ liệu ngày giờ.

Hàm SYSDATETIME ()
hiếm khi được sử dụng và thuộc loại dữ liệu datatime2, chính xác hơn ở dạng phân số
của một giây. Điều này sẽ được sử dụng nếu yêu cầu độ chính xác cao hơn.

Nếu bắt buộc phải có Giờ Phối hợp Quốc tế hoặc UTC, thì GETUTCDATE () hoặc SYSUTCDATETIME ()
có thể được sử dụng, cái sau có độ chính xác cao hơn nếu cần.

Cuối cùng, để có ngày hiện tại ở độ chính xác datetime2 và hiển thị hiện tại
múi giờ tắt, sử dụng SYSDATETIMEOFFSET (). Hàm này trả về kết quả là
kiểu dữ liệu Datetimeoffset (7).

Ví dụ về cách sử dụng

Ví dụ câu lệnh SELECT gọi mỗi hàm ngày hiện tại.

- Ngày giờ hiện tại
LỰA CHỌN
   GETDATE () là 'GETDATE ()'
  , CURRENT_TIMESTAMP là 'CURRENT_TIMESTAMP'
  , SYSDATETIME () dưới dạng 'SYSDATETIME ()';

--UTC và Chênh lệch múi giờ
LỰA CHỌN
   SYSDATETIMEOFFSET () là 'SYSDATETIMEOFFSET ()'
  , GETUTCDATE () là 'GETUTCDATE ()'
  , SYSUTCDATETIME () dưới dạng 'SYSUTCDATETIME ()';
ĐI

Kết quả: Kết quả đầu tiên hiển thị giờ địa phương hiện tại của
máy chủ và các khu vực khác nhau. Kết quả thứ hai hiển thị thời gian hiện tại với
chênh lệch múi giờ và thời gian ngày UTC với các lựa chọn khác nhau. Các
kết quả thực tế sẽ thay đổi tùy theo múi giờ và múi giờ máy chủ của bạn.

Giải pháp – Ví dụ SQL

Tiếp theo, tôi sẽ hiển thị nhiều ví dụ sử dụng khác nhau của các hàm datetime hiện tại.
Đối với một số ví dụ, tôi sẽ sử dụng cơ sở dữ liệu AdventureWorks mẫu của Microsoft.

Ví dụ 1 – Sử dụng làm Tham số cho Tập lệnh

Trong ví dụ này, tôi sẽ khai báo các biến với các kiểu dữ liệu khác nhau và đặt
các giá trị sử dụng các hàm datetime hiện tại khác nhau và sau đó hiển thị kết quả của chúng.

DECLARE @MySmallDateTime smalldatetime = CURRENT_TIMESTAMP;
DECLARE @MyDateTime datetime = GETDATE ();
DECLARE @ MyDateTime2 datetime2 = SYSDATETIME ();
DECLARE @MyDateTimeoffSet datetimeoffset (7) = SYSDATETIMEOFFSET ();
 
CHỌN @MySmallDateTime là 'SmallDateTime',
   @MyDateTime là 'DateTime',
   @ MyDateTime2 là 'DateTime2',
   @MyDateTimeoffSet as 'SYSDATETIMEOFFSET (0)' 
GO

Kết quả: Ví dụ về tập lệnh hiển thị các kết quả với các
Loại dữ liệu. Đối với SYSDATETIMEOFFSET (), tôi đã chỉ định 0 là độ chính xác giây phân số.
Lưu ý rằng SYSDATETIMEOFFSET (0) bao gồm phần bù múi giờ cục bộ trên máy chủ của tôi.

Ví dụ 2 – Sử dụng trong mệnh đề WHERE

Ví dụ này sẽ hiển thị cách sử dụng các hàm datetime hiện tại trong mệnh đề Where.

--Lưu ý Mỗi trong số này trả về kết quả giống nhau
CHỌN * TỪ [Mua hàng]. [Chi tiết đơn hàng] Nơi sửa đổi ngày & lt; HẸN GẶP();
CHỌN * TỪ [Mua hàng]. [Chi tiết đơn hàng] Nơi sửa đổi ngày & lt; DẤU THỜI GIAN HIỆN TẠI;
CHỌN * TỪ [Mua hàng]. [Chi tiết đơn hàng] Nơi sửa đổi ngày & lt; SYSDATETIME (); 
ĐI

Kết quả: Dưới đây cho thấy
một trong các kết quả từng phần được đặt từ ví dụ mệnh đề Where. Cả 3 đều cho kết quả này
trường hợp giống nhau.

Xem Thêm  Nhận xét HTML là gì - bình luận html là gì

Ví dụ 3 – Sử dụng trong câu lệnh CASE

Ví dụ này cho thấy việc sử dụng CURRENT_TIMESTAMP trong một câu lệnh CASE.

DECLARE @MyDateTime smalldatetime = CURRENT_TIMESTAMP
 
CHỌN TRƯỜNG HỢP
   KHI @MyDateTime & gt; CAST (CURRENT_TIMESTAMP as smalldatetime) THÌ 'Bạn đến sớm'
   KHI @MyDateTime = CAST (CURRENT_TIMESTAMP dưới dạng smalldatetime) THÌ 'Bạn đến đúng giờ'
   KHI @MyDateTime & lt; CAST (CURRENT_TIMESTAMP as smalldatetime) THÌ 'Bạn đến muộn'
 KẾT THÚC là 'Kết quả' 
ĐI

Kết quả: Trong câu lệnh CASE cho kết quả smalldatetime được chuyển đổi
giá trị ngày chuyển đến phút gần nhất hiển thị 00 giây.

Ví dụ 4 – Sử dụng làm Mặc định trong Lược đồ Bảng

Trong ví dụ này, tôi sẽ tạo một bảng có 3 cột kiểu dữ liệu ngày và sẽ
xác định mỗi với một giá trị mặc định của mỗi hàm ngày hiện tại. Tôi sẽ chèn
3 hàng vào bảng và chọn kết quả.

Tạo Bảng #MSTips_Currentdate (
   id int ID (1,1),
   Modified_by nvarchar (20),
   Modified_On mặc định smalldatetime GETDATE (),
   Created_On datetime mặc định CURRENT_TIMESTAMP,
   Sys_Change_Date datetime2 mặc định SYSDATETIME ()
);
ĐI

chèn vào các giá trị #MSTips_Currentdate (Modified_by) ('MSSQLTips-1');
chèn vào các giá trị #MSTips_Currentdate (Modified_by) ('MSSQLTips-2');
chèn vào các giá trị #MSTips_Currentdate (Modified_by) ('MSSQLTips-3');
chọn * từ #MSTips_Currentdate;
 
Thả bảng #MSTips_Currentdate;
ĐI

Kết quả: Bảng Kết quả mặc định hiển thị ngày hiện tại mặc định
các cột được điền tự động. Ngoài ra, tại đây bạn có thể xem smalldatetime
làm tròn đến phút gần nhất.

Ví dụ 5 – Trả lại Chỉ ngày

Ví dụ này khai báo các biến có kiểu dữ liệu DATE và đặt các giá trị bằng cách sử dụng
các chức năng Ngày giờ hiện tại khác nhau.

DECLARE @MySmallDateTime DATE = CURRENT_TIMESTAMP;
DECLARE @MyDateTime DATE = GETDATE ();
DECLARE @ MyDateTime2 DATE = SYSDATETIME ();
DECLARE @MyDateTimeoffSet DATE = SYSDATETIMEOFFSET ();
 
CHỌN @MySmallDateTime là 'SmallDateTime',
   @MyDateTime là 'DateTime',
   @ MyDateTime2 là 'DateTime2',
   @MyDateTimeoffSet as 'SYSDATETIMEOFFSET (0)'
ĐI

Kết quả: Đặt hàm ngày giờ hiện tại thành kết quả biến DATE.

Ví dụ 5a – Sử dụng CAST để Trả lại Chỉ DATE

Một kỹ thuật khác là sử dụng CAST để chỉ trả về Ngày.

CHỌN CAST (CURRENT_TIMESTAMP là DATE);
CHỌN CAST (GETDATE () là DATE);
CHỌN CAST (SYSDATETIME () là DATE);
CHỌN CAST (SYSDATETIMEOFFSET () là DATE);
ĐI

Kết quả: Truyền đến DATE kết quả.

Nó cũng có thể sử dụng

CHỌN CHUYỂN ĐỔI
thay vì ĐÚC.

Ví dụ 6 – Sử dụng làm tham số cho một thủ tục được lưu trữ

Rất tiếc, khi gọi một thủ tục được lưu trữ có tham số ngày, bạn
không thể chuyển trực tiếp các hàm ngày hiện tại. Bạn có thể khai báo một biến dữ liệu
nhập datetime và sử dụng biến được truyền cho tham số thủ tục được lưu trữ.

Ví dụ 6a – Tạo Quy trình Kiểm tra được Lưu trữ

Đầu tiên, chúng tôi tạo một quy trình được lưu trữ thử nghiệm.

TẠO PROC My_DateTime_Proc
   @MyDateTime DATETIME
như
CHỌN @MyDateTime là 'Current_DateTime';
ĐI

Ví dụ 6b – Cố gắng chuyển trực tiếp Hàm

Tiếp theo, chúng tôi sẽ thử một lệnh gọi SP truyền trực tiếp dấu thời gian hiện tại để xem
đã xảy ra lỗi.

- Cú pháp không chính xác gần từ khóa 'CURRENT_TIMESTAMP'.
thực thi My_DateTime_Proc @MyDateTime = CURRENT_TIMESTAMP;
ĐI
 
- Cú pháp không chính xác gần ')'.
thực thi My_DateTime_Proc @MyDateTime = GETDATE ();
ĐI

Kết quả: Bot h Lỗi cuộc gọi Thủ tục được lưu trữ
ngoài. Xem cả hai lỗi bên dưới.

Ví dụ 6c – Cách thích hợp để chuyển Ngày hiện tại sang Thủ tục được lưu trữ

Bây giờ, tôi sẽ hiển thị việc khai báo một biến, đặt giá trị thành dấu thời gian hiện tại
và gọi SP chuyển biến dấu thời gian hiện tại.

Khai báo @Input datetime = CURRENT_TIMESTAMP
thực thi My_DateTime_Proc @MyDateTime = @Input;
ĐI

Kết quả: Kết quả thành công của Quy trình được lưu trữ.

Kết thúc

Có một số cách để nhận các giá trị Ngày và Giờ hiện tại trong MSSQL với
nhiều hàm SQL. Hy vọng,
hướng dẫn này đã giúp xác định các tùy chọn khác nhau và làm nổi bật sự khác biệt giữa
chúng và sẽ hỗ trợ trong việc xác định thời điểm sử dụng từng cái.

Các bước tiếp theo

Giới thiệu về tác giả

Xem tất cả các mẹo của tôi
Jim Evans hiện là Giám đốc CNTT của Harsco, người đã quản lý các nhóm DBA, Nhà phát triển ứng dụng và BI và Quản lý dữ liệu trong hơn 20 năm.

Bài viết được cập nhật lần cuối: 2021-04-09


Xem thêm những thông tin liên quan đến chủ đề ngày hôm nay tính bằng sql

Tạo Function trong sql servre | Hàm Trong sql server | Giải đề SQL Đề 9 câu 3

  • Tác giả: Son Nguyen
  • Ngày đăng: 2018-06-12
  • Đánh giá: 4 ⭐ ( 7354 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mọi thắc mắc các bạn có thể liên hệ fb cá nhân: https://www.facebook.com/nhsonit
    Tham ra groups học cntt để thảo luận: https://www.facebook.com/groups/it2techone/

Hàm xử lý Date và Time trong SQL

  • Tác giả: vietjack.com
  • Đánh giá: 5 ⭐ ( 5576 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hàm xử lý Date và Time trong SQL – Học SQL cơ bản nâng cao. Học SQL trực tuyến theo các bước từ Khái niệm về database, Cú pháp SQL, Truy vấn SELECT, Truy vấn INSERT, Lệnh DELETE, Truy vấn UPDATE, Ràng buộc (Constraint), Truy vấn DROP, Lệnh TRUNCATE, Từ khóa DISTINCT, Mệnh đề ORDER BY, Mệnh đề GROUP BY, Mệnh đề WHERE, Sử dụng Join, Sử dụng View, Sử dụng Sequence, Transaction, Hàm xử lý, Bảng tạm, Toán tử.

Sql Server: Hàm Lấy Giờ Trong Sql Server : Hàm Ngày Tháng Và Thời Gian

  • Tác giả: final-blade.com
  • Đánh giá: 3 ⭐ ( 5983 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Cách lấy ngày hiện tại trong MySQL

  • Tác giả: freetuts.net
  • Đánh giá: 5 ⭐ ( 9453 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài này mình sẽ hướng dẫn cách lấy ngày giờ hiện tại trong MySQL bằng cách sử dụng các hàm build-in function có sẵn trong thư viện của MySQL.

Tất tần tật về xử lý ngày tháng (DATE

  • Tác giả: vncoder.vn
  • Đánh giá: 3 ⭐ ( 8722 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Kiểu dữ liệu ngày tháng (date/time) không giống những kiểu dữ liệu nguyên thuỷ thông thường nên thường gây khó khăn cho các bạn lập trình viên nhất là khi thao tác với các câu lệnh mysql, trong bài viết này mình sẽ tổng hợp và hướng dẫn các bạn làm việc với kiểu date/time trong mysql

Xử lý Date trong SQL

  • Tác giả: viettuts.vn
  • Đánh giá: 4 ⭐ ( 2550 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bảng dưới đây liệt kê tất cả các hàm xử lý Date trong SQL. Ngoài những hàm quan trong dưới đây, có nhiều hàm khác được hỗ trợ bởi các RDBMS khác nhau.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php