Làm cách nào để chuyển đổi dấu thời gian thành datetime trong MySQL?


133

Làm thế nào để chuyển đổi 1300464000sang 2011-03-18 16:00:00trong MySQL?


2
Vui lòng tìm kiếm các câu hỏi / câu trả lời hiện có trước khi bạn đăng câu hỏi mới - chủ đề này đã được đề cập chi tiết.
John Parker

2
Bạn đã xem tài liệu này chưa? Đó là tất cả: dev.mysql.com/doc/refman/5.5/en/date-and-time-fifts.html
Felix Kling

Câu trả lời:


200

Sử dụng FROM_UNIXTIME()chức năng trong MySQL

Hãy nhớ rằng nếu bạn đang sử dụng một khung lưu trữ nó tính bằng mili giây (ví dụ dấu thời gian của Java), bạn phải chia cho 1000 để có được thời gian Unix đúng trong vài giây.


1
SELECT from_unixtime( TIMESTAMP( "2011-12-01", "22:01:23.048" ) )không hoạt động. tại sao? sử dụng v5.6
Janus Troelsen

3
@JanusTroelsen SELECT from_unixtime( unix_timestamp(TIMESTAMP( "2011-12-01", "22:01:23.048" ) ) )hoạt động. TIMESTAMP()không trả về một giá trị nguyên.
cnvzmxcvmcx

4
Chỉ vì tôi đã làm điều này và bị nhầm lẫn ở đầu ra: MySQL lưu trữ thời gian Unix trong vài giây, trong khi rất nhiều khung công tác khác lưu trữ nó trong một phần nghìn giây (tức là dấu thời gian của Java). Vì vậy, chỉ cần nhớ chia cho 1000 nếu bạn đang sử dụng chức năng này trên dữ liệu đến từ nơi nào đó sử dụng millis cho thời gian Unix.
Chris Thompson

64
DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%Y-%m-%d %H:%i:%s') as "Date" FROM `orders`

Đây là giải pháp tối ưu nếu ngày đã cho ở định dạng được mã hóa như 1300464000


3
Cảm ơn vì điều đó. Để bao gồm thời gian: DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%d-%m-%Y %H:%i:%s') as "Date" FROM `orders`
Nhà phát triển web JNP

Tôi khá chắc chắn DATE_FORMAT (FROM_UNIXTIME ( orderdate), '% Y-% m-% d') là "Ngày" TỪ orderssẽ là giải pháp tối ưu: D
Kyle

14

Để trả lời bình luận của Janus Troelsen

Sử dụng UNIX_TIMESTAMP thay vì TIMESTAMP

SELECT from_unixtime( UNIX_TIMESTAMP(  "2011-12-01 22:01:23.048" ) )

Hàm TIMESTAMP trả về một Ngày hoặc một Thời gian và không phải là dấu thời gian, trong khi UNIX_TIMESTAMP trả về dấu thời gian unix


dường như rõ ràng để so sánh thời gian unix từ thời gian unix. Tôi sử dụng CHỌN (CAST (DATE_FORMAT (from_unixtime (UNIX_TIMESTAMP (CURRENT_TIMESTAMP)), '% Y-% m-% d') làm NGÀY) <CAST ('2019-05-02' NHƯ NGÀY)); để so sánh ngày, tôi thay thế 2019-05 * 02 một đối tượng datetime được định dạng trong php. Thnaks.
Mantisse

1
Xin vui lòng không trả lời theo cách này cho câu hỏi khác với câu hỏi ban đầu.
Paweł Stankowski

Điều này không trả lời câu hỏi ban đầu theo bất kỳ cách nào
Nico Haase


3

SELECT from_unixtime( UNIX_TIMESTAMP(fild_with_timestamp) ) from "your_table"
Công việc này đối với tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.