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: Jim Evans | 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.
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.
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ữ
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