วิธีรับวันที่ปัจจุบันโดยไม่มีเวลา


83

ใน SQL Server 2005 ฉันจะได้รับวันที่ปัจจุบันโดยไม่มีเวลาได้อย่างไร ฉันได้ใช้GETDATE()แต่ต้องการให้มีเวลา 00: 00: 00.0

คำตอบ:


119

เร็วที่สุดถ้าคุณมีการย้ำกว่าระเบียนและไม่ได้มีวันที่ใน SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

คำตอบที่แตกต่างและยอดเยี่ยมสองอย่างของ StackOverflow คือ: One , Two

การแปลง Varchar เป็นหนึ่งในวิธีที่แย่ที่สุดที่จะทำ แน่นอนว่าสำหรับค่าหนึ่งอาจไม่สำคัญ แต่เป็นนิสัยที่ดีในการเข้า

วิธีนี้ยังกำหนดไว้เช่นกันถ้าคุณต้องการสร้างดัชนีคอลัมน์ที่คำนวณ แม้แต่ชาวบ้านที่เขียนหนังสือเกี่ยวกับ SQL Server ก็ยังไม่ทันได้แปลงข้อมูล

เทคนิคนี้ยังขยายได้

  • เมื่อวานนี้: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • ต้นเดือน DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • สิ้นเดือนที่แล้ว: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • ต้นเดือนถัดไป: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

แก้ไข:

ดังที่ฉันได้กล่าวถึงเกี่ยวกับการกำหนดวิธีการ varchar ไม่ปลอดภัยเว้นแต่คุณจะใช้สไตล์ 112

คำตอบอื่น ๆ ที่นี่ชี้ให้เห็นว่าคุณจะไม่ใช้สิ่งนี้กับคอลัมน์ สิ่งนี้ถูกต้อง แต่คุณอาจต้องการเลือกแถว 100k หรือเพิ่มคอลัมน์ที่คำนวณหรือ GROUP BY dateonly จากนั้นคุณต้องใช้วิธีนี้

คำตอบอื่น ๆ ยังระบุถึงรูปแบบ 110 นี่ไม่ใช่ภาษาหรือ SET DATEFORMAT ปลอดภัยและล้มเหลวด้วยการตั้งค่าภาษา "อังกฤษ" ดูคำแนะนำที่ดีที่สุดสำหรับประเภทข้อมูลวันที่โดย Tibor Karaszi


1
ลิงก์ที่ให้ไว้จะตาย
Viswanathan Iyer

6

คุณต้องแปลงเป็น varchar โดยระบุรูปแบบของรูปแบบ (110 ในกรณีนี้) จากนั้นแปลง (หรือส่ง) ไปที่ datetime

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.