Làm thế nào để có được ngày & giờ hiện tại trong MySQL?


148

Có một giá trị hoặc lệnh như DATETIME mà tôi có thể sử dụng trong truy vấn thủ công để chèn ngày và giờ hiện tại không?

INSERT INTO servers (
  server_name, online_status, exchange, disk_space, network_shares
) VALUES(
  'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE' 'DATETIME' 
)

Giá trị DATETIME được trích dẫn ở cuối là nơi tôi muốn thêm ngày và giờ hiện tại.



6
NGAY BÂY GIỜ (), xem dev.mysql.com/doc/refman/5.5/en/, ... Và xin vui lòng, lần sau hãy đặt ít nhất một số nỗ lực nghiên cứu vào câu hỏi của bạn, điều này có thể dễ dàng bị đánh lừa (do đó tôi chỉ đánh giá thấp câu hỏi này )
dirkk

Câu hỏi của tôi nhắm nhiều hơn vào cách tôi nên sử dụng nó trong cú pháp tôi đã đăng ở trên.
Samuel Nicholson

1
Xem câu trả lời của franciscos cho điều đó. Nhưng điều này rất, rất cơ bản, nó chỉ là một cuộc gọi chức năng. Do đó, một lần nữa, bạn nên đặt nhiều nỗ lực nghiên cứu hơn vào vấn đề trước khi đăng câu hỏi và bạn cũng có thể muốn đọc một số hướng dẫn về SQL.
dirkk

7
mỉa mai khi nỗ lực tìm kiếm câu trả lời bạn có thể ... câu trả lời này!
Zach Smith

Câu trả lời:


266

Bạn có thể sử dụng NOW():

INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares, c_time)
VALUES('m1', 'ONLINE', 'exchange', 'disk_space', 'network_shares', NOW())

1
# 1054 - Cột 'tem' không xác định trong 'danh sách trường' - Có thiếu thứ gì không?
Samuel Nicholson

44
Chỉ cần thay thế tem bằng bất cứ tên lĩnh vực của bạn là gì, thực sự. Đừng chỉ sao chép và dán.
francisco.preller

8
Nếu đó là loại trường "ngày", bạn cũng có thể sử dụngcurdate()
tandy

32

Sử dụng CURRENT_TIMESTAMP () hoặc ngay bây giờ ()

Giống

INSERT INTO servers (server_name, online_status, exchange, disk_space,
network_shares,date_time) VALUES('m1','ONLINE','ONLINE','100GB','ONLINE',now() )

hoặc là

INSERT INTO servers (server_name, online_status, exchange, disk_space,
network_shares,date_time) VALUES('m1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE'
,CURRENT_TIMESTAMP() )

Thay thế date_time bằng tên cột bạn muốn sử dụng để chèn thời gian.


25

Mặc dù có nhiều câu trả lời được chấp nhận, tôi nghĩ cách này cũng có thể:

Tạo bảng 'máy chủ' của bạn như sau :

CREATE TABLE `servers`
(
      id int(11) NOT NULL PRIMARY KEY auto_increment,
      server_name varchar(45) NOT NULL,
      online_status varchar(45) NOT NULL,
      _exchange varchar(45) NOT NULL, 
      disk_space varchar(45) NOT NULL,
      network_shares varchar(45) NOT NULL,
      date_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

câu lệnh INSERT của bạn phải là :

INSERT INTO servers (server_name, online_status, _exchange, disk_space, network_shares)
VALUES('m1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE');

Môi trường của tôi:

Máy tính xách tay Windows Core i3 có RAM 4GB và tôi đã làm ví dụ trên trên MySQL Workbench 6.2 (Phiên bản 6.2.5.0 Build 397 64 Bits)



2
INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares)
VALUES('m1','ONLINE','exchange','disk_space','network_shares', NOW())

2

Câu trả lời đúng là SYSDATE () .

INSERT INTO servers (
    server_name, online_status, exchange, disk_space,
    network_shares, date_time
)
VALUES (
    'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE', SYSDATE()
);

Chúng ta có thể thay đổi hành vi này và thực hiện NOW()hành vi tương tự như SYSDATE()bằng cách đặt đối số dòng lệnh sysdate_is_now thành True.

Lưu ý rằng NOW()(có CURRENT_TIMESTAMP()một bí danh), khác với SYSDATE()một cách tinh tế :

SYSDATE () trả về thời gian thực thi. Điều này khác với hành vi của NOW (), trả về thời gian không đổi cho biết thời gian mà câu lệnh bắt đầu thực thi. (Trong hàm được kích hoạt hoặc kích hoạt, NOW () trả về thời gian tại đó hàm hoặc câu lệnh kích hoạt bắt đầu thực thi.)

Như được chỉ định bởi Erandi , cách tốt nhất là tạo bảng của bạn với DEFAULTmệnh đề để cột được điền tự động với dấu thời gian khi bạn chèn một hàng mới:

date_time datetime NOT NULL DEFAULT SYSDATE()

Nếu bạn muốn ngày hiện tại ở định dạng epoch , thì bạn có thể sử dụng UNIX_TIMESTAMP () . Ví dụ:

select now(3), sysdate(3), unix_timestamp();

sẽ mang lại

+-------------------------+-------------------------+------------------+
| now(3)                  | sysdate(3)              | unix_timestamp() |
+-------------------------+-------------------------+------------------+
| 2018-11-27 01:40:08.160 | 2018-11-27 01:40:08.160 |       1543282808 |
+-------------------------+-------------------------+------------------+

Liên quan:



1

Nếu bạn thay đổi giá trị mặc định thành hiệu CURRENT_TIMESTAMPquả hơn,

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;

0

Bạn có thể sử dụng không chỉ now(), cũng current_timestamp()localtimestamp(). Lý do chính của dấu thời gian hiển thị không chính xác là chèn NOW () với dấu ngoặc đơn ! Nó không hoạt động với tôi trong MySQL Workbench vì IDE này thêm các trích dẫn đơn cho các hàm mysql và tôi đã không nhận ra nó ngay lập tức)

Không sử dụng các hàm với các dấu ngoặc đơn như trong MySQL Workbench. Nó không hoạt động.


-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");

Bạn nên giải thích ngắn gọn câu trả lời của bạn.
Sebastian Zartner

Câu trả lời này có nghĩa là rất ít thực sự!
Matteo Tassinari
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.