Caách so sánh dữ liệu kiểu date trong sql

Bài viết sẽ giới thiệu tổng quát về các kiểu dữ liệu SQL thường dùng trong các phần mềm cơ sở dữ liệu thông dụng: MySQL , SQL Sever và Oracle.

GIỚI THIỆU

Dữ liệu SQL được lưu trữ dưới dạng các cột và các hàng .Mỗi cột sẽ được gán 1 kiểu dữ liệu và thông tin nhập vào cột đó sẽ được lưu trữ dưới định dạng của kiểu dữ liệu được gán.

Ví dụ:

Cột A có định dạng DATE sẽ lưu trữ dữ liệu dưới định dạng dd/mm/yyyy (dd là ngày , mm là tháng và yyyy là năm),nếu dữ liệu nhập vào sai định dạng này sẽ không được nhận biết và lưu trữ lại.

Caách so sánh dữ liệu kiểu date trong sql
Thử nhập sai định dạng

Tại ví dụ này , phần mềm MySQL thông báo đã thực hiện câu lệnh thành công nhưng khi kiểm tra lại tại cột ngày ( được gán định dạng DATE) , dữ liệu nhập vào sai định dạng và chỉ được ghi nhận dưới dạng 0000-00-00

Caách so sánh dữ liệu kiểu date trong sql
Dữ liệu không được lưu trữ đúng

Còn ở ví dụ này , khi nhập đúng định dạng của dữ liệu là (‘2023-03-01’) khi này mysql sẽ nhận biết và cho phép lưu trữ thông tin vào cột ‘ngày’

Caách so sánh dữ liệu kiểu date trong sql
Thử nhập dữ liệu đúng định dạng được gán

Hoặc chúng ta có thể dùng hàm STR_TO_DATE để nhập theo định dạng chúng ta mong muốn mà không gặp phải lỗi định dạng , ví dụ như sau:

INSERT INTO chat(ngày)
 VALUES (STR_TO_DATE('01/03/2023','%d/%m/%Y'))

Caách so sánh dữ liệu kiểu date trong sql
Kết quả trả về chính xác

PHÂN LOẠI

Hiện nay , có rất nhiều các loại phần mềm quản trị cơ sở dữ liệu trên thị trường , chính vì vậy tuỳ thuộc vào nhu cầu và thói quen sử dụng của từng doanh nghiệp , từng loại phần mềm sẽ có những quy định về cú pháp cũng như tên gọi riêng cho các kiểu dữ liệu SQL nhưng về căn bản , các phần mềm đều hỗ trợ đầy đủ những kiểu dữ liệu cần thiết để quản trị viên có thể lưu trữ dữ liệu một cách linh hoạt nhất.

Bài viết này sẽ giới thiệu đến người đọc 1 vài các kiểu dữ liệu SQL cơ bản thường được sử dụng trong quá trình khai báo cũng như lưu trữ dữ liệu trên 3 phần mềm quản trị cơ sở dữ liệu thường gặp như là : MySQL , SQL sever và Oracle. Trong nội dung bài viết này , SmartData phân loại các dạng dữ liệu thành 4 dạng cơ bản như sau:

  1. Ký tự
  2. Số nguyên
  3. Số thực
  4. Thời gian

MYSQL

KIỂU DỮ LIỆU KÝ TỰ

CHAR(N)là phương thức lưu trữ chuỗi ký tự với độ dài cố định ( có thể chứa các ký tự , số và các ký tự đặc biệt ). Có độ lớn tối đa 255 ký tự và bạn có thể điều chỉnh lượng ký tự được nhập vào bằng phương thức (n), ví dụ : CHAR(10)-sẽ chứa được chuỗi có tối đa 10 ký tự.VARCHAR(N)là phương thức lưu trữ chuỗi ký tự với độ dài linh động ( có thể chứa các ký tự , số và các ký tự đặc biệt ). Có độ lớn tối đa 65535 ký tự , bạn có thể điều chỉnh lượng ký tự được nhập vào bằng phương thức (n), ví dụ : VARCHAR(10)-sẽ chứa được chuỗi có tối đa 10 ký tự.TEXT(N)Lưu trữ 65535 ký tự tối đa Kiểu dữ liệu ký tự trong MySQL

KIỂU DỮ LIỆU SỐ NGUYÊN

TINYINT(n)Số nguyên dương : 0 –> 255 , Số nguyên âm : -128 –> 127. Với n là độ rộng hiển thị dãy số.SMALLINTSố nguyên dương : 0 –> 65,535 , Số nguyên âm : -32,768 –> 32,767.Với n là độ rộng hiển thị dãy số.MEDIUMINT(n)Số nguyên dương : 0 –> 167,777,215 , Số nguyên âm : -8,388,608 –> 8,388,607.Với n là độ rộng hiển thị dãy số.INT(n)=INTEGER(n)Số nguyên dương : 0 –> 4,294,967,295 , Số nguyên âm : -2,147,483,648 –> 2,147,483,647.Với n là độ rộng hiển thị dãy số.BIGINT(n)Số nguyên dương : 0 –> 18,446,744,073,709,551,615 , Số nguyên âm : -9,223,372,036,854,775,808 –>9,223,372,036,854,775,807.Với n là độ rộng hiển thị dãy số.Kiểu dữ liệu số nguyên trong MySQL

KIỂU DỮ LIỆU SỐ THỰC

FLOAT(a,b)

DOUBLE(a,b)

là 2 dạng lưu trữ cho dữ liệu số thực với mô tả gần đúng các giá trị số thực.MySQL sử dụng 4 byte để lưu trữ FLOAT() và 8 byte để lưu trữ DOUBLE() nên DOUBLE có độ chính xác cao hơn so với FLOAT nhưng sẽ tốn dung lượng lưu trữ nhiều hơn. 2 kiểu dữ liệu này nên được cân nhắc trong trường hợp không cần độ chính xác cao.DECIMAL(a,b)

NUMERIC(a,b)

cả hai kiểu dữ liệu DECIMAL và NUMERIC được sử dụng để lưu trữ các giá trị số với độ chính xác cao. Ví dụ điển hình cho việc sử dụng 2 loại kiểu dữ liệu này là để lưu trữ thông tin số tiền trong tài khoản ngân hàng. Trong cú pháp (a,b) trong cả 2 loại , a là số lượng tối đa của chữ số ( cả trước và sau và cả dấu thập phân) và b là số lượng số tối đa đứng sau dấu thập phân. Ví dụ: DECIMAL(5,3)/NUMERIC(5,3) của 10/3 là 3,333Các kiểu dữ liệu số thực trong MySQL

KIỂU DỮ LIỆU THỜI GIAN

DATEDùng để lưu trữ thông tin ngày tháng. Định dạng: YYYY-MM-DD Phạm vi : từ ‘1000-01-01’ đến ‘9999-12-31’TIMELưu trữ thông tin giờ Định dạng: hh:mm:ss Phạm vi : từ ‘-838:59:59’ đến ‘838:59:59’DATETIMELà sự kết hợp của hàm DATE và TIME Định dạng: YYYY-MM-DD hh:mm:ss Phạm vi: từ 1000-01-01 00:00:00′ đến ‘9999-12-31 23:59:59’TIMESTAMPTIMESTAMP cũng có chức năng tương tự như hàm DATETIME nhưng phạm vi nhỏ hơn (‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC). Một lưu ý khi sử dụng TIMESTAMP là khi lưu trữ Mysql sẽ chuyển thời gian được lưu trữ từ múi giờ của người nhập đến múi giờ UTC . Và khi bạn gọi đến TIMESTAMP đó , Mysql sẽ chuyển đổi từ UTC ngược lại múi giờ đang kết nối của người gọi.Đây là sự khác biệt chính của TIMESTAMP so với DATETIME.YEAR(2) or YEAR(4)Hiển thị số năm với 2 hoặc 4 ký tự Phạm vi 2 ký tự : 0-99 Phạm vi 4 ký tự : 1901-2155Các kiểu dữ liệu thời gian trong MySQL

SQL SEVER

KIỂU DỮ LIỆU CHUỖI

CHAR(N)Có độ dài cố định. Tối đa 8000 ký tựVARCHAR(N)Có độ dài tuỳ biến theo N. Tối đa 8000 ký tựVARCHAR(MAX)có độ dài tuỳ biến theo chuỗi kí tự nhập vào.Tối đa 1.073.741.824 ký tựTEXTcó độ dài tuỳ biến theo chuỗi kí tự nhập vào.Tối đa 2GB.NTEXTnhư TEXT nhưng dùng để lưu trữ bảng mã UNICODENCHARnhư CHAR nhưng dùng để lưu trữ bảng mã UNICODENVARCHARnhư VARCHAR nhưng dùng để lưu trữ bảng mã UNICODENVARCHAR(MAX)như VARCHAR(MAX) nhưng dùng để lưu trữ bảng mã UNICODECác kiểu dữ liệu chuỗi trong SQL sever

KIỂU DỮ LIỆU SỐ NGUYÊN

TINYINTlưu trữ số nguyên từ 0-255 tương đương 1byteSMALLINTlưu trữ số nguyên từ -32,768-32,767 tương đương 2bytesINTlưu trữ số nguyên từ -2,147,483,648-2,147,483,647 tương đương 4 bytesBIGINTlưu trữ số nguyên từ -9,223,372,036,854,775,808-9,223,372,036,854,775,807 tương đương 8 bytesCác kiểu dữ liệu số nguyên trong SQL sever

KIỂU DỮ LIỆU SỐ THỰC

DECIMAL(P,S)

NUMERIC(P,S)

cả hai kiểu dữ liệu DECIMAL và NUMERIC được sử dụng để lưu trữ các giá trị số với độ chính xác cao. Trong cú pháp (P,S) P chỉ tổng số chữ số trước cả sau dấu thập phân , trong đó S chỉ số lượng số sau dấu thập phânSMALLMONEYĐơn vị lưu trữ tiền tệ có giới hạn từ -214,748.3648-214,748.3647 ~ 4 bytesMONEYĐơn vị lưu trữ tiền tệ có giá trị lớn hơn SMALLMONEY từ -922,337,203,685,477.5808-922,337,203,685,477.5807~ 8 bytesFLOAT(N)

REAL

FLOAT VÀ REAL cũng đều được dùng lưu trữ giá trị thập phân nhưng độ chính xác không cao bằng DECIMAL và NUMERIC. Trong đó FLOAT sử dụng 8 bytes để lưu trữ nên sẽ chính xác hơn REAL với 4 bytesCác kiểu dữ liệu số thực trong SQL sever

KIỂU DỮ LIỆU THỜI GIAN

DATETIMELưu trữ thời gian với độ rộng : 1/1/1753 – 31/12/9999 độ chính xác 3.33 miligiây ~ 8BytesDATETIME2Lưu trữ thời gian với độ rộng : 1/1/0001 – 31/12/9999 độ chính xác 100 nanogiây~ 6-8BytesSMALLDATETIMELưu trữ thời gian với độ rộng : 1/1/1900-6/6/2079 độ chính xác 1 phút ~ 4BytesDATELưu trữ thời gian với độ rộng : 1/1/0001 – 31/12/9999 ~ 3BytesTIMELưu trữ giờ/phút/giây(.nnnnnnn) với độ chính xác 100 nanogiây ~ 3-5BytesDATETIMEOFFSETKiểu dữ liệu DATETIMEOFFSET được sử dụng để lưu trữ thông tin về thời gian và múi giờ. Độ rộng và độ chính xác tương tự DATETIME2TIMESTAMPKiểu dữ liệu TIMESTAMP được sử dụng để lưu trữ thông tin về thời gian đánh dấu thời điểm cuối cùng mà một dòng dữ liệu được thay đổi hoặc chèn vào trong một bảng. Kiểu dữ liệu này được lưu trữ dưới dạng một số nguyên 8 byte và tự động được cập nhật mỗi khi một dòng dữ liệu được thay đổi hoặc chèn vào bảng. Giá trị của TIMESTAMP tăng dần theo thời gian, với độ chính xác đến 3 con số sau dấu thập phân.Các kiểu dữ liệu thời gian trong SQL sever

ORACLE

KIỂU DỮ LIỆU KÝ TỰ

NCHARNCHAR là một kiểu dữ liệu để lưu trữ các ký tự Unicode giống như NVARCHAR2. Tuy nhiên, NCHAR sử dụng cố định độ dài cho mỗi ký tự (2 byte) và không thể thay đổi được. Do đó, NCHAR được sử dụng để lưu trữ các chuỗi có độ dài cố định như mã số bưu chính, số điện thoại, số CMND.NVARCHAR2NVARCHAR2 là một kiểu dữ liệu để lưu trữ các ký tự Unicode. Kiểu dữ liệu này cho phép lưu trữ các ký tự đa ngôn ngữ và hỗ trợ nhiều ngôn ngữ, bao gồm cả các ngôn ngữ có chứa các ký tự không phải Latin, chẳng hạn như tiếng Trung, tiếng Nhật, tiếng Hàn… NVARCHAR2 có độ dài tối đa là 4000 ký tự và sử dụng 2 byte cho mỗi ký tự. Tuy nhiên, trong phiên bản Oracle 12c trở lên, độ dài tối đa của NVARCHAR2 có thể tăng lên tới 32767 byte, tương đương với 16383 ký tự UnicodeVARCHAR2VARCHAR2 là một kiểu dữ liệu trong Oracle để lưu trữ các chuỗi ký tự. Đây là một kiểu dữ liệu khá phổ biến trong Oracle và được sử dụng rộng rãi để lưu trữ các chuỗi có độ dài thay đổi. VARCHAR2 có thể lưu trữ tối đa 4000 ký tự.VARCHARTương đương với VARCHAR2 , khác biệt duy nhất VARCHAR là dạng ký tự đạt chuẩn ANSI trong khi đó VARCHAR 2 là chuẩn của chỉ riêng ORACLE.Các kiểu dữ liệu ký tự trong Oracle

KIỂU DỮ LIỆU DẠNG SỐ

Ở Oracle, kiểu dữ liệu dạng số được phân chia thành 2 loại cơ bản:

INTEGERKiểu dữ liệu Integer được sử dụng để lưu trữ các giá trị số nguyên. Kiểu dữ liệu này có kiểu dữ liệu con là PLS_INTEGER và BINARY_INTEGER.Trong đó, PLS_INTEGER là một kiểu dữ liệu đặc biệt của Oracle, được tối ưu để thực hiện các tính toán số nguyên nhanh hơn và sử dụng bộ nhớ ít hơn so với kiểu dữ liệu số nguyên chuẩn.NUMBERKiểu dữ liệu Number được sử dụng để lưu trữ các giá trị số, bao gồm cả số nguyên và số thực. Kiểu dữ liệu này có thể được định nghĩa với độ chính xác và tỷ lệ phần trăm theo yêu cầu.

Để khai báo một cột với kiểu dữ liệu Number trong Oracle, ta có thể sử dụng cú pháp sau: CREATE TABLE table_name (column_name NUMBER(precision, scale))

Trong đó, precision là tổng số chữ số được lưu trữ và scale là số chữ số sau dấu thập phân. Nếu không có precision hoặc scale được chỉ định, giá trị mặc định là 38.

Các kiểu dữ liệu số trong Oracle

KIỂU DỮ LIỆU THỜI GIAN

DATEKiểu dữ liệu DATE được sử dụng để đại diện cho một giá trị ngày theo định dạng YYYY-MM-DD. Ví dụ: CREATE TABLE orders ( order_id NUMBER, order_date DATE, customer_id NUMBER, order_total NUMBER)TIMESTAMPĐịnh dạng TIMESTAMP được sử dụng để lưu trữ giá trị ngày tháng và thời gian cụ thể. Ví dụ CREATE TABLE logins ( user_id NUMBER, login_time TIMESTAMP, ip_address VARCHAR2(50))INTERVAL YEAR TO MONTHĐịnh dạng INTERVAL YEAR TO MONTH được sử dụng để lưu trữ khoảng thời gian tính bằng năm và tháng. Ví dụ: CREATE TABLE contracts ( contract_id NUMBER, start_date DATE, end_date DATE, duration INTERVAL YEAR TO MONTH)INTERVAL DAY TO SECONDĐịnh dạng INTERVAL DAY TO SECOND được sử dụng để lưu trữ khoảng thời gian tính bằng ngày, giờ, phút, giây và mili giây. Ví dụ: CREATE TABLE sessions ( session_id NUMBER, start_time TIMESTAMP, end_time TIMESTAMP, duration INTERVAL DAY TO SECOND, user_id NUMBER)Các kiểu dữ liệu thời gian trong Oracle

TỔNG KẾT

Qua bài viết trên , SmartData đã giới thiệu với các bạn các kiểu dữ liệu SQL thông dụng trên các cơ sở dữ liệu phổ biến MySQL , SQL Sever và Oracle. Hi vọng sẽ cung cấp được thêm những thông tin cần thiết cho các bạn trong quá trình nghiên cứu.

Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 6 tháng của SmartData.

Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: