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

T-SQL Kiểu dữ liệu ngày giờ

Giới thiệu

Kiểu dữ liệu là các thuộc tính chỉ định loại dữ liệu mà các đối tượng như cột, biến cục bộ, biểu thức và tham số có thể chứa. Trên toàn thế giới RDBMS, các kiểu dữ liệu thường được nhóm thành các kiểu dữ liệu chuỗi, số và ngày.

T-SQL hỗ trợ 6 kiểu dữ liệu ngày và giờ cụ thể là:

  1. Ngày giờ
  2. Smalldatetime
  3. Ngày tháng
  4. Thời gian
  5. Datetime2
  6. Bộ đếm ngày tháng

Hai kiểu dữ liệu đầu tiên được coi là phiên bản kế thừa của kiểu mới hơn. Trong bài viết này, chúng tôi tập trung vào các loại dữ liệu ngày và cụ thể là vào datetime datetime2 các kiểu dữ liệu có sẵn trong SQL Server. Bảng 1 cung cấp chi tiết về các kiểu dữ liệu ngày và giờ khác nhau có sẵn trong SQL Server.

[id bảng =59 /]

Loại dữ liệu ngày và giờ của tab 1

Datetime và Datetime2

Datatime là một kiểu dữ liệu kết hợp ngày với thời gian ở định dạng đồng hồ 24 giờ. Phạm vi ngày được hỗ trợ trong kiểu dữ liệu ngày giờ như được hiển thị trong Tab 1 và nó có độ chính xác khoảng 3 mili giây.

Datetime2 là phần mở rộng của kiểu dữ liệu datetime. Nó chứa nhiều giá trị hơn có thể và có độ chính xác 100 nano giây, tốt hơn nhiều so với người tiền nhiệm của nó. Một khía cạnh quan trọng khác của kiểu dữ liệu dattime2 là dung lượng lưu trữ cần thiết nằm trong khoảng từ 6 đến 8 byte tùy thuộc vào độ chính xác bạn chọn.

  • Bạn có thể đạt được độ chính xác 1 mili giây bằng cách cho phép ba chữ số thập phân trên thành phần giây. Do đó, mỗi giá trị sẽ tiêu tốn sáu byte.
  • Bạn có thể đạt được độ chính xác 100 nano giây bằng cách cho phép bảy chữ số thập phân trên thành phần giây. Do đó, mỗi giá trị sẽ tiêu tốn 8 byte.

Minh chứng

Chèn giá trị ngày sai

Chúng tôi tạo một bảng với các chi tiết được hiển thị trong Liệt kê 1 để thực hiện một vài minh họa minh họa cách thao tác với datetime datetime2 kiểu dữ liệu.

-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Sau đó, chúng tôi cố gắng điền vào bảng một hàng như được hiển thị trong Liệt kê 2 nhưng chúng tôi nhận được lỗi hiển thị trong Hình 1. Từ khóa trong thông báo lỗi là các giá trị "nằm ngoài phạm vi". Điều đang nói là giá trị của cô ấy mà chúng tôi đang cố gắng chèn thấp hơn 01-Jan-1753 hoặc cao hơn 31-Dec-9999 . Trong trường hợp này, vấn đề là chúng tôi chưa sử dụng định dạng mục nhập được đề xuất là ‘ YYYYMMDD hh:mm:ss.nnn '(Xem Bảng 1). Đọc giá trị ‘ 06101979 ‘, SQL Server giả định 0610 là năm (khớp với YYYY). Lỗi này không xảy ra cho kiểu dữ liệu datetime2 vì phạm vi cho datetime2 rộng hơn bắt đầu từ năm 0001.

-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Hình 1 Lỗi được trả về cho cột ngày giờ

Chèn giá trị ngày chính xác

Chúng tôi cố gắng khắc phục sự cố bằng cách nhập định dạng mục nhập chính xác cho cột ngày giờ như được hiển thị trong Liệt kê 3. Khi chúng tôi chạy lại câu lệnh, chúng tôi nhận được lỗi hiển thị trong Hình 2. Lỗi này về cơ bản là do không tuân theo cùng một lỗi. thông số kỹ thuật định dạng mục nhập. Tuy nhiên, vấn đề nằm ở phần khác của ngày ‘ 06101979 ‘Phù hợp với định dạng mục nhập‘ YYYYMMDD hh:mm:ss.nnn '. Trong trường hợp này, SQL Server giả định 19 Là một tháng và 79 là một ngày trong tháng. Cố gắng chuyển đổi ngầm định này không thành công vì cả hai khẳng định trước đều không đúng.

-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Hình 2 Lỗi được trả về cho cột Datetime2

Liệt kê 4 cho phép chúng tôi chứng minh khẳng định cuối cùng. Giá trị 01101201 phù hợp với phạm vi cho datetime2 và chúng tôi có thể chèn hàng. Giá trị này chuyển thành ngày 1 tháng 12 năm 0110 như chúng ta thấy trong hình 3.

-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Xác minh dữ liệu

Hình 3 Truy vấn Tập dữ liệu

Khi chúng tôi truy vấn bảng nhân viên, chúng tôi thấy rõ ràng độ chính xác của kiểu dữ liệu datetime khi so sánh với kiểu thay thế datetime2. Hãy chuyển sang một cái gì đó nham hiểm hơn một chút:Cài đặt ngôn ngữ. Hãy xem Liệt kê 6. Chúng tôi đang chèn các bản ghi giống hệt nhau bằng cách sử dụng định dạng ngày 06/10/1979 . Do đó, định dạng này KHÔNG phải là ngôn ngữ trung lập khi chúng tôi đặt ngôn ngữ thành Anh trong câu lệnh đầu tiên rồi đến us_english trong lần thứ hai, chúng tôi thấy rằng chúng tôi đã chèn hai ngày khác nhau thực sự mặc dù các giá trị thô của chúng tôi giống nhau. Đây là lý do tại sao điều quan trọng là luôn sử dụng định dạng mục nhập được đề xuất khi xử lý datetime datetime2 .

-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Hình 4 Nhân viên truy vấn

Với cài đặt ngôn ngữ là Anh , SQL Server diễn giải hai số liệu đầu tiên là ngày nhưng với cài đặt ngôn ngữ là us_english , SQL Server diễn giải hai số liệu đầu tiên là một tháng. Một điều cuối cùng mà chúng tôi cần đề cập ở đây là khi chèn các bản ghi của mình, chúng tôi đã không chỉ định thành phần thời gian, do đó SQL Server tự động giả định là trung bình là nửa đêm của ngày được chỉ định.

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về kiểu dữ liệu datetime và datetime2 trông như thế nào, sự khác biệt chính của chúng và cách đảm bảo bạn đang nhập đúng ngày khi sử dụng các kiểu dữ liệu này. Trong quá trình đó, chúng tôi cũng đã kiểm tra hai lỗi mà nhà phát triển có thể gặp phải khi làm việc với các loại dữ liệu này.

Tài liệu tham khảo

  • Các kiểu dữ liệu SQL
  • Ben-Gan, I. (2016) Nguyên tắc cơ bản về T-SQL. trang74-78. Microsoft Press.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lựa chọn kiểu dữ liệu có thể có tác động như thế nào?

  2. Hội nghị thượng đỉnh PASS 2013:Thành công ở Charlotte

  3. SQL Cheat Sheet:SQL, SQL Commands và SQL Injection là gì

  4. T-SQL so với SQL

  5. Cập nhật tệp cấu hình với cài đặt cơ sở dữ liệu mới của bạn