ตั้งค่าฟิลด์ฐานข้อมูล DateTime เป็น“ Now”


100

ในโค้ด VB.net ฉันสร้างคำขอด้วยพารามิเตอร์ SQL ฉันตั้งค่าพารามิเตอร์ DateTime เป็นค่า DateTime ตอนนี้คำขอของฉันจะเป็นอย่างไร

UPDATE table SET date = "2010/12/20 10:25:00";

หรือ

UPDATE table SET date = GETDATE();

ในกรณีแรกฉันแน่ใจว่าทุกระเบียนจะถูกตั้งค่าเป็นเวลาเดียวกัน ในกรณีที่สองขึ้นอยู่กับว่า DBMS ประมวลผลคำขออย่างไร ซึ่งทำให้ฉันไปสู่คำถามที่สอง: SQL Server ตั้งวันที่และเวลาเดียวกันเมื่ออัปเดตตารางขนาดใหญ่ด้วย NOW () หรือไม่

แก้ไข:แทนที่ NOW () (ซึ่งไม่มีอยู่ใน SQL Server) โดย GETDATE ()

คำตอบ:


181

ใน SQL คุณต้องใช้GETDATE():

UPDATE table SET date = GETDATE();

ไม่มีNOW()ฟังก์ชั่น


เพื่อตอบคำถามของคุณ:

ในตารางขนาดใหญ่เนื่องจากฟังก์ชันได้รับการประเมินสำหรับแต่ละแถวคุณจะได้รับค่าที่แตกต่างกันสำหรับฟิลด์ที่อัปเดต

ดังนั้นหากความต้องการของคุณคือตั้งค่าทั้งหมดเป็นวันเดียวกันฉันจะทำสิ่งนี้ (ยังไม่ทดลอง):

DECLARE @currDate DATETIME;
SET @currDate = GETDATE();

UPDATE table SET date = @currDate;

อ๊ะใช่ตอนนี้ () เป็น Mysql ขออภัย แต่คำถามยังคงอยู่
Thibault Witzig

โอเคขอบคุณ. ดังนั้นฉันต้องแน่ใจว่าได้ใส่วันที่จริง (จากรหัส) ในคำขอของฉันไม่ใช่ GETDATE () คุณรู้หรือไม่ว่ามันตั้งค่าพารามิเตอร์ SQL เป็น DateTime ตอนนี้จะทำเช่นนี้หรือถ้าฉันควรแปลงวันที่เป็นสตริงก่อนแล้ว เพิ่มในคำขอ?
Thibault Witzig

@@ Thibault Witzig - คุณทำได้ หรือคุณสามารถใช้ SQL ที่ฉันโพสต์ไว้ (รับวันที่ปัจจุบันเป็นตัวแปรและใช้ตัวแปรเพื่อกำหนดวันที่ในตาราง - ค่าในตัวแปรจะไม่เปลี่ยนแปลง)
Oded

หากคุณต้องการเก็บเวลาเดียวกันสำหรับระเบียนทั้งหมดให้ส่ง Now in เป็นพารามิเตอร์โดยใช้ Parameterized SQL ด้วยวิธีนี้คุณไม่ต้องกังวลเกี่ยวกับการแยกวิเคราะห์สตริงหรือปัญหาการจัดรูปแบบสตริงข้อมูลที่แปลเป็นภาษาท้องถิ่น
Jim Wooley

20

อีกทางเลือกหนึ่งของ GETDATE () คือ CURRENT_TIMESTAMP สิ่งเดียวกันแน่นอน


7
CURRENT_TIMESTAMPเป็น SQL Standard จริงดังนั้นบางคนอาจโต้แย้งว่านี่เป็นไวยากรณ์ที่ต้องการ
Tony L.

นี่ค่อนข้างผิด ฉันเพิ่งอ่านเอกสารของสองคนนั้นและดูเหมือนว่าฉันจะเห็นได้ชัดว่าเอกสารเหล่านี้ไม่ได้ "เหมือนกันทุกประการ" คำถามนี้มีคำอธิบายโดยละเอียดสำหรับสิ่งนี้: stackoverflow.com/questions/7105093/…
Mladen B.

7

ใช้GETDATE ()

ส่งคืนการประทับเวลาของระบบฐานข้อมูลปัจจุบันเป็นค่าวันที่และเวลาโดยไม่มีการชดเชยโซนเวลาของฐานข้อมูล ค่านี้ได้มาจากระบบปฏิบัติการของคอมพิวเตอร์ที่อินสแตนซ์ของ SQL Server กำลังทำงานอยู่

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