2014-10-02 14 views
16

Tôi đang cố gắng hiểu điều gì sẽ tạo giá trị cho loại DATE trong MySQL. Dưới đây là một số những điều tôi đã cố gắng:MySQL CAST là DATE

SELECT CAST('3' AS DATE); 
-- null 

SELECT CAST(3 AS DATE); 
-- null 

SELECT CAST('2014-07-01 19:00:01' AS DATE); 
-- 2014-07-01 

SELECT DATE('2014-07-01 19:00:01'); 
-- 2014-07-01 

SELECT CAST('2014-07-01' AS DATE); 
-- 2014-07-01 

SELECT DATE('2014-07-01'); 
-- 2014-07-01 

SELECT CAST('2014-07-50' AS DATE); 
-- null 

SELECT DATE('2014-07-50'); 
-- null 

SELECT DATE(''), CAST('' AS DATE), DATE(0), CAST(0 AS DATE); 
-- null, null, 0000-00-00, 0000-00-00 

Tất cả những gì tôi đã cố gắng dường như hoặc chuyển nó sang null nếu nó không hợp lệ hoặc trả lại phần ngày của chuỗi nếu đó là một ngày hợp lệ. Tôi thậm chí đã thử ngày tháng với các dấu gạch chéo và các định dạng khác, cùng một kết quả.

Sự khác nhau giữa việc sử dụng hàm DATE(expr)CAST(expr AS DATE) là gì?

DATE(expr): Trích xuất phần ngày kể từ ngày hoặc datetime biểu expr.

CAST(expr AS type): Chức năng CAST() mất một biểu hiện của bất kỳ loại và tạo ra một giá trị kết quả của một loại nhất định, tương tự như CONVERT()

Tương tự, cùng một câu hỏi có thể được hỏi về thời gian với TIME(expr)CAST(expr AS TIME).

+0

Tôi nghĩ rằng điều này giải thích các giá trị null của bạn: "Nếu bạn chuyển đổi một‘zero’chuỗi ngày đến một ngày, CONVERT() và CAST() return NULL và tạo cảnh báo khi chế độ SQL NO_ZERO_DATE được bật. " Kiểm tra cảnh báo bằng "SHOW WARNINGS;" https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html –

+0

Hơn nữa: "MySQL truy xuất và hiển thị giá trị DATE ở định dạng 'YYYY-MM-DD'. Phạm vi được hỗ trợ là '1000 -01-01 'đến' 9999-12-31 '". Có thể bạn đang tìm DATETIME. https://dev.mysql.com/doc/refman/5.6/en/datetime.html –

+0

Bất kể tôi có thời gian hay không, tôi muốn biết sự khác biệt giữa việc sử dụng 'CAST (expr AS DATE)' và 'DATE (expr) ', và tôi giả sử điều tương tự có thể được hỏi về thời gian:' TIME (expr) 'so với' CAST (expr AS TIME) '. Ngoài ra tôi đã thêm kết quả của tôi cho ngày không. –

Trả lời