จะเลือกเฉพาะวันที่จากฟิลด์ DATETIME ใน MySQL ได้อย่างไร


115

ฉันมีตารางในฐานข้อมูล MySQL ที่ตั้งค่าด้วยDATETIME. ฉันต้องการSELECTในตารางนี้ภายในวันที่ DATE เท่านั้นและไม่รวมเวลา

ฉันจะSELECTอยู่ในตารางนี้ตามวันที่เท่านั้นและข้ามเวลาได้อย่างไรแม้ว่าคอลัมน์นั้นจะถูกตั้งค่าเป็นDATETIME?


ตัวอย่าง

ตอนนี้มันคือ: 2012-01-23 09:24:41

ฉันต้องทำสิ่งSELECTนี้เท่านั้น:2012-01-23


คำตอบ:


165

SELECT DATE(ColumnName) FROM tablename;

เพิ่มเติมเกี่ยวกับMySQL วันที่ () ฟังก์ชั่น


ฉันกำลังพยายามทำสิ่งนี้ แต่ไม่ได้ผล $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ date. "')";
DiegoP.

2
date (datereg) = 'dateHere'
Balaswamy Vaddeman

$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; สิ่งนี้ควรใช้งานได้ ตรวจสอบให้แน่ใจว่าวันที่ทั้งสองเป็นรูปแบบเดียวกันหากไม่จัดรูปแบบ $ date ก่อนใช้ในอนุประโยค 'where'
Clain Dsilva

ฉันคิดว่าคุณต้องระวังให้ดีเพราะจะไม่ใช้ดัชนีใน ColumnName
d0x

อย่าลืมใส่สัญลักษณ์เน้นเสียง Grave ก่อนและหลังชื่อคอลัมน์ ใน MySql บางเวอร์ชันอาจแสดงวันที่ปัจจุบัน
user2092317

40

คุณสามารถใช้ date_format

select DATE_FORMAT(date,'%y-%m-%d') from tablename

สำหรับโซนเวลา

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"

มันใช้งานได้ดีเพราะตอนนี้ฉันสามารถเลือกข้อมูลจากบางวันได้โดยมีรูปแบบวันที่ '% d'
mjwrazor

เลือก DATE_FORMAT (วันที่ '% Y-% m-% d') จากชื่อตารางขนาดเล็ก "y" ไม่ส่งคืนปีใช้ทุน "Y" แทน
Nirav Joshi

14

คุณสามารถใช้select DATE(time) from appointment_detailsสำหรับวันที่เท่านั้น

หรือ

คุณสามารถใช้select TIME(time) from appointment_detailsเป็นเวลาเท่านั้น



10

ใน MySQL เราได้ฟังก์ชั่นที่เรียกว่าDATE_FORMAT วันที่ (รูปแบบ) ในกรณีของคุณคำสั่งเลือกของคุณจะเป็นดังนี้: -

SELECT DATE_FORMAT(dateTimeFieldName,"%a%m%Y") as dateFieldName FROM table_name

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน Mysql DATE และ TIME คลิกที่นี่



6

ฉันลองทำ 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


3

ลองให้ SELECT * FROM Profiles WHERE date(DateReg)=$date$ date อยู่ใน yyyy-mm-dd

อีกทางเลือกหนึ่ง SELECT * FROM Profiles WHERE left(DateReg,10)=$date

ไชโย


3

คุณสามารถลองสิ่งนี้:

SELECT CURDATE();

หากคุณตรวจสอบสิ่งต่อไปนี้:

SELECT NOW(); SELECT DATE(NOW()); SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');

จะเห็นได้ว่าต้องใช้เวลานาน





1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

สามารถใช้เพื่อรับวันที่ในรูปแบบ "yyyy-mm-dd"


1

หากคอลัมน์เวลาอยู่ในการประทับเวลาคุณจะได้รับค่าวันที่จากการประทับเวลานั้นโดยใช้คำค้นหานี้

SELECT DATE(FROM_UNIXTIME(time)) from table 

0

ในความสนใจของการวางแนวทางแก้ปัญหาที่ใช้ได้จริงสำหรับคำถามนี้:

SELECT ... WHERE `myDateColumn` >= DATE(DATE_FORMAT(NOW(),'%Y-%m-%d'));

เห็นได้ชัดว่าคุณสามารถเปลี่ยนฟังก์ชัน NOW () เป็นวันที่หรือตัวแปรที่คุณต้องการได้

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