ฉันลองทำ a SELECT DATE(ColumnName)
แล้วอย่างไรก็ตามสิ่งนี้ใช้ไม่ได้กับTIMESTAMP
คอลัมน์†เนื่องจากถูกเก็บไว้ใน UTC และใช้วันที่ UTC แทนการแปลงเป็นวันที่ท้องถิ่น ฉันต้องการเลือกแถวที่ตรงกับวันที่ที่ระบุในเขตเวลาของฉันดังนั้นการรวมคำตอบของฉันสำหรับคำถามอื่นนี้เข้ากับคำตอบของ Balaswamy Vaddeman สำหรับคำถามนี้นี่คือสิ่งที่ฉันทำ:
หากคุณจัดเก็บวันที่เป็น DATETIME
แค่ทำ SELECT DATE(ColumnName)
หากคุณจัดเก็บวันที่เป็น TIMESTAMP
โหลดข้อมูลโซนเวลาลงใน MySQLหากคุณยังไม่ได้ดำเนินการ สำหรับเซิร์ฟเวอร์ Windows โปรดดูลิงก์ก่อนหน้านี้ สำหรับเซิร์ฟเวอร์ Linux, FreeBSD, Solaris และ OS X คุณจะต้องทำ:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
จากนั้นจัดรูปแบบการสืบค้นของคุณดังนี้:
SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))
คุณยังสามารถใส่สิ่งนี้ไว้ในWHERE
ส่วนของแบบสอบถามเช่นนี้ (แต่โปรดทราบว่าดัชนีในคอลัมน์นั้นจะไม่ทำงาน):
SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'
(เห็นได้ชัดว่าแทนAmerica/New_York
โซนเวลาท้องถิ่นของคุณ)
†ข้อยกเว้นประการเดียวคือถ้าเขตเวลาท้องถิ่นของคุณคือ GMT และคุณไม่ได้ทำการออมแสงเนื่องจากเวลาท้องถิ่นของคุณเป็นเวลาเดียวกับ UTC