Làm cách nào để chỉ chọn ngày từ trường DATETIME trong MySQL?


115

Tôi có một bảng trong cơ sở dữ liệu MySQL được thiết lập với DATETIME. Tôi chỉ cần có mặt SELECTtrong bảng này trước DATE và không kể thời gian.

Làm cách nào để SELECTtrong bảng này chỉ theo ngày và bỏ qua thời gian, ngay cả khi cột cụ thể đó được đặt thành DATETIME?


Thí dụ

Bây giờ thì đúng là vậy: 2012-01-23 09:24:41

Tôi chỉ cần làm SELECTđiều này:2012-01-23


có thể trùng lặp của MySQL vấn đề so sánh ngày
Marcus Adams

Câu trả lời:


165

SELECT DATE(ColumnName) FROM tablename;

Thông tin thêm về hàm DATE () của MySQL .


Tôi đang cố gắng thực hiện việc này nhưng nó không hoạt động $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.

2
date (datereg) = 'dateHere'
Balaswamy Vaddeman

$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; Điều này sẽ hoạt động. Hãy chắc chắn rằng cả hai ngày là của cùng một định dạng, Nếu không được định dạng ngày $ trước khi sử dụng trong 'nơi" khoản.
Clain Dsilva

Tôi nghĩ bạn cần phải cẩn thận với điều đó vì nó sẽ không sử dụng chỉ mục trên ColumnName
d0x

Đừng quên thêm biểu tượng dấu Grave `trước và sau tên cột. Trong một số phiên bản MySql, nó có thể hiển thị ngày hiện tại.
user2092317

40

bạn có thể sử dụng date_format

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

cho múi giờ

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

Điều này hoạt động hoàn hảo vì bây giờ tôi có thể chọn dữ liệu từ những ngày nhất định chỉ bằng cách có định dạng ngày '% d'.
mjwrazor

chọn DATE_FORMAT (ngày, '% Y-% m-% d') từ tên bảng nhỏ "y" không trả lại vốn sử dụng năm "Y" thay vào đó
Nirav Joshi

14

Bạn chỉ có thể sử dụng select DATE(time) from appointment_detailscho ngày tháng

hoặc là

Bạn chỉ có thể sử dụng select TIME(time) from appointment_detailstrong thời gian


13

Hãy thử sử dụng
cho ngày hôm nay:

SELECT * FROM `tbl_name` where DATE(column_name) = CURDATE()


cho ngày đã chọn:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')

2020: Cảm ơn bạn thân!
MarcoZen


6

Đơn giản là bạn có thể làm

SELECT DATE(date_field) AS date_field FROM table_name

6

Tôi đã thử làm a SELECT DATE(ColumnName), tuy nhiên điều này không hoạt động đối với TIMESTAMPcác cột vì chúng được lưu trữ trong UTC và ngày UTC được sử dụng thay vì chuyển đổi thành ngày cục bộ. Tôi cần chọn các hàng vào một ngày cụ thể trong múi giờ của mình, vì vậy kết hợp câu trả lời của tôi cho câu hỏi khác này với câu trả lời của Balaswamy Vaddeman cho câu hỏi này, đây là những gì tôi đã làm:

Nếu bạn đang lưu trữ ngày tháng như DATETIME

Cứ làm đi SELECT DATE(ColumnName)

Nếu bạn đang lưu trữ ngày tháng như TIMESTAMP

Tải dữ liệu múi giờ vào MySQL nếu bạn chưa làm như vậy. Đối với máy chủ Windows, hãy xem liên kết trước đó. Đối với máy chủ Linux, FreeBSD, Solaris và OS X, bạn sẽ làm như sau:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Sau đó, định dạng truy vấn của bạn như sau:

SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))

Bạn cũng có thể đặt điều này trong WHEREmột phần của truy vấn như thế này (nhưng lưu ý rằng các chỉ mục trên cột đó sẽ không hoạt động):

SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'

(Rõ ràng là thay thế America/New_Yorkcho múi giờ địa phương của bạn.)


Ngoại lệ duy nhất cho điều này là nếu múi giờ địa phương của bạn là GMT và bạn không tiết kiệm ánh sáng ban ngày vì giờ địa phương của bạn giống với UTC.


3

Thử SELECT * FROM Profiles WHERE date(DateReg)=$datexem $ date ở đâu trong yyyy-mm-dd

Ngoài ra SELECT * FROM Profiles WHERE left(DateReg,10)=$date

Chúc mừng


3

Bạn có thể thử điều này:

SELECT CURDATE();

Nếu bạn kiểm tra những điều sau:

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

Bạn có thể thấy rằng nó mất một thời gian dài.



2

Hãy thử câu trả lời này.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'

1

Sử dụng DATE_FORMAT

select DATE_FORMAT(date,'%d') from tablename =>Date only

thí dụ:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;

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

Cái này có thể được sử dụng để lấy ngày ở định dạng 'yyyy-mm-dd'.


1

nếu cột thời gian nằm trên dấu thời gian, bạn sẽ nhận được giá trị ngày từ dấu thời gian đó bằng cách sử dụng truy vấn này

SELECT DATE(FROM_UNIXTIME(time)) from table 

0

Vì lợi ích của việc thực sự đưa ra một giải pháp hiệu quả cho câu hỏi này:

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

Rõ ràng, bạn có thể thay đổi hàm NOW () thành bất kỳ ngày hoặc biến nào bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.