Thời gian giữa MySQL

Điều kiện GIỮA MySQL được sử dụng để truy xuất các giá trị trong một phạm vi trong câu lệnh CHỌN, CHÈN, CẬP NHẬT hoặc XÓA

cú pháp

Cú pháp của Điều kiện GIỮA trong MySQL là

expression BETWEEN value1 AND value2;

Tham số hoặc Đối số

cột biểu thức hoặc phép tính. value1 và value2Những giá trị này tạo ra một phạm vi bao hàm mà biểu thức được so sánh với

Ghi chú

  • Điều kiện GIỮA MySQL sẽ trả về các bản ghi có biểu thức nằm trong phạm vi giá trị 1 và giá trị 2 [bao gồm]
  • Khi sử dụng Điều kiện GIỮA MySQL với ngày tháng, hãy đảm bảo sử dụng hàm CAST để chuyển đổi rõ ràng các giá trị thành ngày tháng

Ví dụ - Với số

Hãy xem xét một số ví dụ về điều kiện GIỮA MySQL bằng cách sử dụng các giá trị số. Ví dụ số sau đây sử dụng điều kiện GIỮA để truy xuất các giá trị trong một phạm vi số

Ví dụ

SELECT *
FROM contacts
WHERE contact_id BETWEEN 100 AND 200;

Ví dụ MySQL GIỮA này sẽ trả về tất cả các hàng từ bảng nhà cung cấp trong đó nhà cung cấp KHÔNG nằm trong khoảng từ năm 2000 đến 2999, bao gồm cả. Nó sẽ tương đương với câu lệnh SELECT sau

Hôm nọ, tôi phải nhanh chóng lấy một số thống kê từ bảng cơ sở dữ liệu. Tôi cần xác định thời gian trung bình để chạy các công việc trong hệ thống xếp hàng. Để làm được điều này, tôi đã sử dụng các phương pháp chênh lệch múi giờ của MySQL. Tôi nghĩ rằng tôi sẽ chia sẻ cách các phương pháp này hoạt động và cách tôi triển khai chúng

Để tính toán sự khác biệt giữa hai ngày, MySQL cung cấp cho chúng tôi hai phương pháp khác nhau. TIMESTAMPDIFFTIMEDIFF. Cái bạn sử dụng tùy thuộc vào cách bạn muốn định dạng sự khác biệt kết quả

DẤU THỜI GIAN

Phương thức này trả về chênh lệch giữa hai ngày theo đơn vị được cung cấp làm tham số đầu tiên. Ví dụ: nếu chúng tôi muốn biết sự khác biệt giữa hai ngày tính bằng giây

SELECT id, job, TIMESTAMPDIFF[SECOND, start_date, end_date] AS runtime
    FROM example_table;

Điều này tính toán end_date - start_date trong vài giây

Các đơn vị có thể là bất kỳ một trong những điều sau đây. FRAC_SECOND [micro giây], GIÂY, PHÚT, GIỜ, NGÀY, TUẦN, THÁNG, QUÝ hoặc NĂM

Ngày được truyền cho phương thức này không cần phải cùng loại. Một cái có thể là DATETIME và cái kia là NGÀY. Nếu cột có loại NGÀY thì nó sẽ được coi là có thời gian nửa đêm

TIMEDIFF

Phương thức này trả về sự khác biệt giữa hai ngày được định dạng là hours:minutes:seconds.microseconds

SELECT id, job, TIMEDIFF[end_date, start_date] AS runtime
    FROM example_table;

Giống như TIMESTAMPDIFF, điều này tính toán end_date - start_date, nhưng lưu ý rằng các tham số ngày được gọi theo thứ tự ngược lại

Không giống như TIMESTAMPDIFF, cả hai ngày cần phải cùng loại

Một ví dụ thực tế

Bây giờ chúng ta đã thiết lập cách sử dụng các phương thức chênh lệch múi giờ của MySQL, hãy xem xét một trường hợp sử dụng thực tế

Như tôi đã đề cập lúc đầu, tôi cần kiểm tra xem hàng đợi của mình mất bao lâu để xử lý công việc. Tôi có một bảng queued_t task chứa thông tin chi tiết về các tác vụ nền. Sử dụng TIMEDIFF tôi đã có thể xác định các công việc chạy dài nhất và ngắn nhất trong tháng trước

SELECT MAX[TIMEDIFF[completed, fetched]] AS max_runtime, MIN[TIMEDIFF[completed, fetched]] AS min_runtime
    FROM queue
    WHERE completed IS NOT NULL AND created > NOW[] - INTERVAL 1 MONTH;

Điều này đã cho tôi phạm vi thời gian chạy cho hàng đợi của tôi

Sau đó, tôi có thể sử dụng TIMESTAMPDIFF để tính thời gian trung bình, sử dụng phạm vi tôi vừa tính để chọn một đơn vị thời gian thích hợp

Ví dụ

Trả về sự khác biệt giữa hai biểu thức thời gian

CHỌN TIMEDIFF["13. 10. 11", "13. 10. 10"];

Tự mình thử »

Định nghĩa và cách sử dụng

Hàm TIMEDIFF[] trả về sự khác biệt giữa hai biểu thức thời gian/ngày giờ

Ghi chú. time1 và time2 phải có cùng định dạng và phép tính là time1 - time2

cú pháp

Giá trị tham số

Tham sốMô tảthời gian1Bắt buộc. Một giá trị thời giantime2Required. Giá trị thời gian khác

chi tiết kỹ thuật

Thêm ví dụ

Ví dụ

Trả về sự khác biệt giữa hai biểu thức ngày giờ

CHỌN TIMEDIFF["25-06-2017 13. 10. 11", "2017-06-15 13. 10. 10"];

Tự mình thử »

Trong bảng travel, có ba cột. id, departurearrival. Bạn muốn tính toán sự khác biệt giữa arrivaldeparture

Bảng travel trông như thế này

iddeparturearrival12018-03-25 12. 00. 002018-04-05 07. 30. 0022019-09-12 15. 50. 002019-10-23 10. 30. 3032018-07-14 16. 15. 002018-07-14 20. 40. 3042018-01-05 08. 35. 002019-01-08 14. 00. 00

Giải pháp 1 [chênh lệch về ngày, giờ, phút hoặc giây]

SELECT
  id,
  departure,
  arrival,
  TIMESTAMPDIFF[SECOND, departure, arrival] AS difference
FROM travel;

Kết quả là

idkhởi hànhđếnsự khác biệt12018-03-25 12. 00. 002018-04-05 07. 30. 0093420022019-09-12 15. 50. 002019-10-23 10. 30. 30352323032018-07-14 16. 15. 002018-07-14 20. 40. 301593042018-01-05 08. 35. 002019-01-08 14. 00. 0031814700

Thảo luận

Để tính toán sự khác biệt giữa các dấu thời gian trong MySQL, hãy sử dụng hàm. Đối số đơn vị có thể là

WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
2,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
3,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
4,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
5,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
6,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
7,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
8,
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
9 hoặc
CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
0. Để có sự khác biệt tính bằng giây như chúng ta đã làm ở đây, hãy chọn
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
3. Để có được sự khác biệt trong vài phút, hãy chọn
WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;
4; . Các đối số kết thúc và bắt đầu lần lượt là dấu thời gian kết thúc và dấu thời gian bắt đầu [ở đây, departurearrival,
CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
6]

Giải pháp 2 [sự khác biệt về ngày, giờ, phút và giây]

WITH difference_in_seconds AS [
  SELECT
    id,
    departure,
    arrival,
    TIMESTAMPDIFF[SECOND, departure, arrival] AS seconds
  FROM travel
],

differences AS [
  SELECT
    id,
    departure,
    arrival,
    seconds,
    MOD[seconds, 60] AS seconds_part,
    MOD[seconds, 3600] AS minutes_part,
    MOD[seconds, 3600 * 24] AS hours_part
  FROM difference_in_seconds
]

SELECT
  id,
  departure,
  arrival,
  CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
FROM differences;

Kết quả là

idkhởi hànhđếnsự khác biệt12018-03-25 12. 00. 002018-04-05 07. 30. 0010 ngày 19 giờ 30 phút 0 giây22019-09-12 15. 50. 002019-10-23 10. 30. 3040 ngày 18 giờ 40 phút 30 giây32018-07-14 16. 15. 002018-07-14 20. 40. 300 ngày 4 giờ 25 phút 30 giây42018-01-05 08. 35. 002019-01-08 14. 00. 00368 ngày 5 giờ 25 phút 0 giây

Thảo luận

Đầu tiên, tính toán sự khác biệt giữa các dấu thời gian tính bằng giây, sử dụng hàm

CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
7 [CTE đầu tiên, có tên là
CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference
8], giống như trong Giải pháp 1. Tính xem có bao nhiêu giây vượt quá cả phút [_______14_______9] để sau này tính giây, bao nhiêu giây vượt quá cả giờ [
FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
0] sau này sẽ dùng để tính phút và bao nhiêu giây ở đó

Để làm điều này, hãy sử dụng hàm

FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
2. Ví dụ: một giờ có 3600 giây, vì vậy để biết có bao nhiêu giây trong
FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
0, hãy tìm phần còn lại từ phép chia cho 3600 như sau

FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
4

Tương tự, có

FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
5 giây trong một ngày, vì vậy để tính xem có bao nhiêu giây trong
FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
1, hãy viết

FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
7

Khi những phần còn lại này được tính toán [trong CTE thứ hai, có tên là

FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
8], cuối cùng bạn có thể nhận được sự khác biệt về ngày, giờ, phút và giây. Để có được số giây, phút, giờ và ngày, hãy chia số giây trong phần còn lại cho số giây tương ứng trong ngày, giờ hoặc phút. Ví dụ: để biết số phút sẽ được hiển thị, hãy lấy
FLOOR[seconds / 3600 / 24] AS days,
FLOOR[hours_part / 3600] AS hours,
FLOOR[minutes_part / 60] AS minutes,
seconds_part AS seconds
0 và chia cho 60, vì có 60 phút trong một giờ. Bạn chỉ cần phần nguyên từ cái này [i. e. , không có phần thập phân], vì vậy hãy sử dụng hàm FLOOR[] như thế này

travel0

Cuối cùng, bạn chỉ cần hiển thị trong một chuỗi những gì bạn đã tính toán. Để thực hiện việc này, hãy sử dụng hàm travel1 trong truy vấn bên ngoài

CONCAT[
    FLOOR[seconds / 3600 / 24], ' days ',
    FLOOR[hours_part / 3600], ' hours ',
    FLOOR[minutes_part / 60], ' minutes ',
    seconds_part, ' seconds'
  ] AS difference

Giải pháp được trình bày ở đây trả về cột cuối cùng dưới dạng văn bản. Bạn có thể dễ dàng sửa đổi giải pháp này để hiển thị nó ở một số định dạng khác. Bạn cũng có thể hiển thị các số trong các cột riêng biệt, như thế này

Làm cách nào để tìm thời gian giữa hai lần trong MySQL?

Hàm TIMEDIFF[] trả về sự khác biệt giữa hai biểu thức thời gian/ngày giờ. Ghi chú. time1 và time2 phải có cùng định dạng và phép tính là time1 - time2

Khoảng thời gian giữa trong MySQL là gì?

MySQL truy xuất và hiển thị các giá trị DATETIME trong ' YYYY-MM-DD hh. mm. định dạng ss. Phạm vi được hỗ trợ là ' 1000-01-01 00. 00. 00' đến '9999-12-31 23. 59. 59 '. Kiểu dữ liệu DẤU THỜI GIAN được sử dụng cho các giá trị chứa cả phần ngày và giờ. DẤU THỜI GIAN có phạm vi '1970-01-01 00. 00. 01' UTC đến '2038-01-19 03. 14. 07' UTC.

Làm cách nào để lấy thời gian trong MySQL?

Hàm CURRENT_TIME[] trong MySQL dùng để kiểm tra thời gian hiện tại. Nó trả về thời gian hiện tại dưới dạng giá trị trong 'hh. mm. ss' hoặc hhmmss, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số

Làm cách nào để sử dụng giữa trong datetime trong MySQL?

Điều kiện MYSQL BETWEEN chỉ định cách truy xuất các giá trị từ một biểu thức trong một phạm vi cụ thể. Nó được sử dụng với câu lệnh SELECT, INSERT, UPDATE và DELETE. .
LỰA CHỌN *
TỪ nhân viên
WHERE working_date GIỮA CAST ['24-01-2015' NHƯ NGÀY] VÀ CAST ['25-01-2015' NHƯ NGÀY];

Chủ Đề