วิธีรับวันและเวลาปัจจุบันใน MySQL


148

มีค่าหรือคำสั่งเช่น DATETIME ที่ฉันสามารถใช้ในแบบสอบถามแบบแมนนวลเพื่อแทรกวันที่และเวลาปัจจุบันหรือไม่

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

ค่า DATETIME ที่ยกมาในตอนท้ายเป็นที่ที่ฉันต้องการเพิ่มวันที่และเวลาปัจจุบัน



6
ตอนนี้ (), ดูdev.mysql.com/doc/refman/5.5/en/ … ... และโปรดครั้งต่อไปอย่างน้อยพยายามค้นคว้าคำถามของคุณนี้สามารถ googled ได้อย่างง่ายดาย (ดังนั้นฉันเพิ่ง downvoted คำถามนี้ )
dirkk

คำถามของฉันมีจุดมุ่งหมายเพิ่มเติมว่าฉันควรใช้มันอย่างไรในไวยากรณ์ที่ฉันโพสต์ไว้ด้านบน
ซามูเอลนิโคลสัน

1
ดู franciscos คำตอบสำหรับสิ่งนั้น แต่นี่เป็นพื้นฐานธรรมดามากมันเป็นเพียงการเรียกใช้ฟังก์ชัน ดังนั้นอีกครั้งคุณควรพยายามวิจัยเพิ่มเติมในปัญหาก่อนโพสต์คำถามและคุณอาจต้องการอ่านคำแนะนำใน SQL
dirkk

7
แดกดัน เมื่อพยายามหาคำตอบที่คุณได้รับ ... คำตอบนี้!
Zach Smith

คำตอบ:


266

คุณสามารถใช้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 - คอลัมน์ที่ไม่รู้จัก 'ตราประทับ' ใน 'รายการเขตข้อมูล' - มีบางสิ่งที่ฉันขาดหายไปหรือไม่
ซามูเอลนิโคลสัน

44
เพียงแทนที่ตราประทับด้วยชื่อฟิลด์ของคุณ อย่าคัดลอกและวาง
francisco.preller

8
หากเป็นประเภทเขตข้อมูล "วันที่" คุณยังสามารถใช้curdate()
tandy

32

ใช้ CURRENT_TIMESTAMP ()หรือ ตอนนี้ ()

ชอบ

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

หรือ

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

แทนที่ date_time ด้วยชื่อคอลัมน์ที่คุณต้องการใช้เพื่อแทรกเวลา


25

แม้ว่าจะมีคำตอบที่ยอมรับมากมาย แต่ฉันคิดว่าวิธีนี้ก็เป็นไปได้เช่นกัน:

สร้างตาราง'เซิร์ฟเวอร์'ของคุณดังต่อไปนี้:

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
);

และคำสั่งINSERTของคุณควรเป็น:

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

สภาพแวดล้อมของฉัน:

Core i3 Windows Laptop พร้อม 4GB RAM และฉันทำตัวอย่างข้างต้นบน MySQL Workbench 6.2 (เวอร์ชั่น 6.2.5.0 Build 397 64 Bits)




2

คำตอบที่ถูกต้องคือSYSDATE ()

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

เราสามารถเปลี่ยนพฤติกรรมนี้และทำให้NOW()ทำงานในลักษณะเดียวกับที่SYSDATE()โดยการตั้งค่าsysdate_is_nowTrueอาร์กิวเมนต์บรรทัดคำสั่ง

โปรดทราบว่าNOW()(ซึ่งมีCURRENT_TIMESTAMP()นามแฝง) แตกต่างจากSYSDATE()ในทางที่ลึกซึ้ง :

SYSDATE () ส่งคืนเวลาที่ดำเนินการ สิ่งนี้แตกต่างจากลักษณะการทำงานสำหรับ NOW () ซึ่งส่งคืนเวลาคงที่ที่ระบุเวลาที่คำสั่งเริ่มทำงาน (ภายในฟังก์ชั่นหรือทริกเกอร์ที่เก็บไว้ตอนนี้ () จะคืนค่าเวลาที่คำสั่งฟังก์ชั่นหรือการเรียกใช้เริ่มทำงาน)

ตามที่ระบุโดยErandi วิธีที่ดีที่สุดคือสร้างตารางของคุณด้วยส่วนDEFAULTคำสั่งเพื่อให้คอลัมน์ได้รับการเติมโดยอัตโนมัติด้วยการประทับเวลาเมื่อคุณแทรกแถวใหม่:

date_time datetime NOT NULL DEFAULT SYSDATE()

หากคุณต้องการวันที่ปัจจุบันในยุครูปแบบแล้วคุณสามารถใช้UNIX_TIMESTAMP () ตัวอย่างเช่น:

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

จะให้ผลผลิต

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

ที่เกี่ยวข้อง:


1

ในการออกแบบฐานข้อมูลแนะนำอย่างยิ่งให้ใช้ Unixtime เพื่อความสอดคล้องและประสิทธิภาพการทำดัชนี / การค้นหา / การเปรียบเทียบ

UNIX_TIMESTAMP() 

หนึ่งสามารถแปลงเป็นรูปแบบที่มนุษย์สามารถอ่านได้หลังจากนั้นเป็นสากลเป็นสะดวกที่สุด

FROM_ UNIXTIME (unix_timestamp, [format ])

1

ถ้าคุณทำการเปลี่ยนค่าเริ่มต้นCURRENT_TIMESTAMPมันจะทำให้ประสิทธิภาพมากขึ้น

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

0

คุณสามารถใช้ไม่เพียง แต่now()ยังและcurrent_timestamp() localtimestamp()สาเหตุหลักของการประทับเวลาการแสดงผลที่ไม่ถูกต้องกำลังแทรก NOW () ด้วยเครื่องหมายคำพูดเดี่ยว ! มันไม่ทำงานสำหรับฉันใน MySQL Workbench เพราะ IDE นี้เพิ่มราคาเดียวสำหรับฟังก์ชั่น mysql และฉันไม่รู้จักในครั้งเดียว)

อย่าใช้ฟังก์ชั่นที่มีเครื่องหมายคำพูดเดี่ยวเช่นใน MySQL Workbench มันไม่ทำงาน


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

คุณควรอธิบายคำตอบของคุณในไม่ช้า
Sebastian Zartner

คำตอบนี้มีความหมายน้อยมาก!
Matteo Tassinari
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.