Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Loại bỏ giây từ cột TIME trong MySQL (TIME_FORMAT)

Để hiển thị cột kiểu TIME chỉ gồm giờ:phút (HH:MM) mà bỏ giây, bạn dùng hàm TIME_FORMAT() với định dạng '%H:%i'.

Cú pháp

SELECT TIME_FORMAT(ten_cot_time, '%H:%i') AS ten_moi FROM ten_bang;

Các ký hiệu định dạng thời gian

Ký hiệuÝ nghĩaVí dụ
%HGiờ 24h (00-23)14
%hGiờ 12h (01-12)02
%iPhút (00-59)30
%sGiây (00-59)45
%pAM/PMPM
%THH:MM:SS (24h)14:30:45
%rhh:mm:ss AM/PM (12h)02:30:45 PM

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE removeSecondsFromTime (
    Id INT NOT NULL AUTO_INCREMENT,
    StartTime TIME,
    EndTime TIME,
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu

INSERT INTO removeSecondsFromTime(StartTime, EndTime) VALUES
('10:20:45', '11:21:40'),
('12:30:55', '13:20:21'),
('14:40:57', '15:55:02');

3. Xem dữ liệu gốc (có giây)

SELECT * FROM removeSecondsFromTime;

Kết quả:

+----+-----------+----------+
| Id | StartTime | EndTime  |
+----+-----------+----------+
| 1  | 10:20:45  | 11:21:40 |
| 2  | 12:30:55  | 13:20:21 |
| 3  | 14:40:57  | 15:55:02 |
+----+-----------+----------+

4. Loại bỏ giây, chỉ giữ giờ:phút

SELECT 
    TIME_FORMAT(StartTime, '%H:%i') AS StartingTime,
    TIME_FORMAT(EndTime, '%H:%i') AS EndingTime
FROM removeSecondsFromTime;

Kết quả:

+--------------+------------+
| StartingTime | EndingTime |
+--------------+------------+
| 10:20        | 11:21      |
| 12:30        | 13:20      |
| 14:40        | 15:55      |
+--------------+------------+

Các cách khác

Cách 1: CAST sang TIME(0) - MySQL 8.0+ (lưu trữ không có giây)

-- Chỉ hiển thị
SELECT CAST(StartTime AS TIME(0)) FROM bang;

-- Cập nhật dữ liệu (bỏ giây vĩnh viễn)
UPDATE bang SET StartTime = CAST(StartTime AS TIME(0));

Cách 2: SUBSTRING (cách cũ, không khuyến khích)

SELECT SUBSTRING(StartTime, 1, 5) FROM bang;  -- '10:20'

Cách 3: DATE_FORMAT (cũng dùng cho DATETIME)

SELECT DATE_FORMAT(ten_cot_datetime, '%H:%i') FROM bang;

Lưu ý

  • TIME_FORMAT() trả về VARCHAR (chuỗi), không phải kiểu TIME
  • Nếu cần tính toán sau đó, hãy giữ nguyên cột TIME gốc, chỉ format khi SELECT
  • MySQL 8.0.19+ hỗ trợ TIME(0), TIME(3) (precision) để lưu không giây/mili-giây
  • Để parse ngược: STR_TO_DATE('10:20', '%H:%i')