Cách insert dữ liệu kiểu date trong MySQL

Bởi Kiên Smart Data
0 Nhận xét

Trong quá trình làm việc tính toán với cơ sở dữ liệu MySQL, việc thao tác với các dữ liệu dạng thời gian là không thể tránh khỏi, đây cũng là vẫn đề khá rắc rối đối với những người mới làm quen với cơ sở dữ liệu này. Do đó qua bài viết này chúng ta hãy cùng tìm hiểu một số vấn đề cơ bản xoay quanh việc xử lý với kiểu dữ liệu dạng thời gian.

Các kiểu dữ liệu thời gian trong MySQL

  • DATE – format YYYY-MM-DD
  • DATETIME – format: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP – format: YYYY-MM-DD HH:MI:SS

Vấn đề thường gặp phải với kiểu dữ liệu thời gian

Như ở phần 1 đã liệt kê các format mặc định của các kiểu dữ liệu dạng thời gian, do đó nếu thao tác bình thường với các kiểu dữ liệu này ví dụ như insert bản ghi và ta truyền dữ liệu của trường có kiểu thời gian này đính định dạng theo datatype thì sẽ không có vấn đề gì xảy ra. Hoặc khi ta thực hiện select dữ liệu từ bảng có trường có datatype là thời gian thì dữ liệu trả về cũng sẽ theo đúng các định dạng tương ứng như trên.

Ví dụ: ta có bảng nhanvien với trường NGSINH có kiểu dữ liệu là date như sau:

CREATE TABLE NHANVIEN ( HONV NVARCHAR(15), TENLOT NVARCHAR(15), TENNV NVARCHAR(15), MANV NVARCHAR(9) NOT NULL, NGSINH DATE, DCHI NVARCHAR(30), PHAI NVARCHAR(3), LUONG FLOAT, MA_NQL NVARCHAR(9), PHG INT NOT NULL, PRIMARY KEY (MANV) ) 

Ta thực hiện thêm bản ghi bằng câu lệnh:

INSERT INTO `NHANVIEN` VALUES ('LÊ', 'QUỲNH', 'NHƯ', '001', '1967-02-01', '291 Hồ Văn Hue, Tp HCM', 'Nữ', 56000, '006', 4);

Như ta thấy dữ liệu ở trường NGSINH được truyền đúng định dạng mặc định mà MySQL hiểu nên câu lệnh này thành công.

Nhưng nếu với cách truyền sai định dạng mặc định date vào trường NGSINH thì sao?

Ta thực hiện câu lệnh

INSERT INTO `NHANVIEN` VALUES ('NGUYỄN', 'MẠNH', 'HÙNG', '004', '04-03-2000', '95 Bà Rịa Vũng Tàu', 'Nam', 38000, '005', 5);

Kết quả:

>Error Code: 1292. Incorrect date value: '04-03-2000' for column 'NGSINH' at row 1

Như vậy MySQL không thể nhận dạng được  NGSINH này để thực hiện câu lệnh insert. Làm thế nào để xử lý vấn đề này

Hàm STR_TO_DATE

Mô tả

Hàm STR_TO_DATE lấy một chuỗi và trả về một ngày được chỉ định bởi mặt nạ định dạng.

Cú pháp

STR_TO_DATE ( string, format_mask )

Giải thích:

  • string: Giá trị chuỗi để định dạng là một ngày.
  • format_mask: Các định dạng để áp dụng cho string.

Sau đây là danh sách các tùy chọn cho tham số format_mask.

Giá trịMô tả
%aViết tắt tên ngày trong tuần (Sun – Sat)
%bViết tắt tên tháng (Jan đến Dec)
%cTháng dưới dạng giá trị số (0 đến 12)
%DNgày trong tháng dưới dạng giá trị số, theo sau là hậu tố (1st, 2nd, 3rd, …)
%dNgày trong tháng dưới dạng giá trị số (01 đến 31)
%eNgày trong tháng dưới dạng giá trị số (1 đến 31)
%fGiây (000000 đến 999999)
%HHour (00 đến 23)
%h hoặc %lGiờ (00 đến 12)
%iPhút (00 đến 59)
%jNgày trong năm (001 đến 366)
%kGiờ (00 đến 23)
%lGiờ (1 đến 12)
%MTên tháng đầy đủ (January đến December)
%mTên tháng dưới dạng giá trị số (00 đến 12)
%pAM hoặc PM
%rThời gian ở định dạng 12 giờ AM hoặc PM (hh: mm: ss AM / PM)
%SGiây (00 đến 59)
%sGiây (00 đến 59)
%TThời gian ở định dạng 24 giờ (hh: mm: ss)
%UTuần mà Chủ nhật là ngày đầu tuần (00 đến 53)
%uTuần mà thứ Hai là ngày đầu tuần (00 đến 53)
%VTuần mà Chủ nhật là ngày đầu tuần (01 đến 53)
%vTuần mà thứ Hai là ngày đầu tuần (01 đến 53)
%WTên ngày trong tuần đầy đủ (Sunday đến Saturday)
%wNgày trong tuần trong đó Chủ nhật = 0 và Thứ bảy = 6
%XNăm trong tuần mà Chủ nhật là ngày đầu tuần
%xNăm trong tuần, thứ Hai là ngày đầu tuần
%YNăm dưới dạng giá trị số, 4 chữ số
%yNăm dưới dạng giá trị số, 2 chữ số

Ví dụ: Chúng ta cùng quay lại vấn đề đầu tiên đã nêu ở trên với câu lệnh nhưng ta sử dụng hàm STR_TO_DATE(), với việc khai báo đúng định dạng ngày-tháng-năm của chuỗi ’04-03-2000′

SQL> INSERT INTO `NHANVIEN` VALUES ('NGUYỄN', 'MẠNH', 'HÙNG', '004', STR_TO_DATE('04-03-2000', '%d-%c-%Y'), '95 Bà Rịa Vũng Tàu', 'Nam', 38000, '005', 5);

Và kết quả thực hiện là bản ghi được insert thành công

Kết luận

Thông qua bài viết chúng ta đã tìm hiểu được cách sử dụng hàm STR_TO_DATE() để có thể làm việc dễ dàng hơn với các dữ liệu kiểu thời gian trong MySQL, đây là một hàm rất mạnh và được các nhà phát triển sử dụng rất nhiều. Rất vui khi có thể chia sẻ kiến thức này cho các bạn. Để tìm hiểu thêm các kiến thức hay khác về SQL bạn có thể tham khảo link dưới đây.

Bài viết liên quan

Để lại nhận xét

Copyright @2022 – Bản quyền thuộc Học viện dữ lệu Smart Data