2009-12-07 46 views
52

Tôi đang sử dụng hệ thống trong đó ngày được lưu trữ dưới dạng chuỗi ở định dạng dd/mm/yyyy. Có thể chuyển đổi điều này thành yyyy-mm-dd trong truy vấn SELECT (để tôi có thể sử dụng DATE_FORMAT trên đó) không? MySQL có chức năng phân tích cú pháp ngày không?Chuyển đổi ngày trong MySQL từ trường chuỗi

Hiện tại, phương pháp duy nhất tôi có thể nghĩ là ghép nối một loạt các bản chất, nhưng hy vọng có một giải pháp đơn giản hơn.

(Đáng tiếc là tôi không thể chuyển đổi lĩnh vực này đến một trường ngày đúng vì nó là một meta-bảng:. Cùng một cột chứa các giá trị cho các lĩnh vực khác nhau mà chỉ là chuỗi)

Trả lời

111

này:

STR_TO_DATE(t.datestring, '%d/%m/%Y') 

... sẽ chuyển đổi chuỗi thành một kiểu dữ liệu datetime. Để chắc chắn rằng nó đi ra theo định dạng mà bạn mong muốn, sử dụng DATE_FORMAT:

DATE_FORMAT(STR_TO_DATE(t.datestring, '%d/%m/%Y'), '%Y-%m-%d') 

Nếu bạn không thể thay đổi kiểu dữ liệu trên cột gốc, tôi đề nghị creating a view mà sử dụng STR_TO_DATE cuộc gọi để chuyển đổi chuỗi thành một Kiểu dữ liệu DateTime.

+1

hữu ích và giúp tôi rất nhiều cho giải pháp nhanh chóng –

4

STR_TO_DATE cho phép bạn làm điều này, và nó có một đối số định dạng.

17

Vâng, có str_to_date

mysql> select str_to_date("03/02/2009","%d/%m/%Y"); 
+--------------------------------------+ 
| str_to_date("03/02/2009","%d/%m/%Y") | 
+--------------------------------------+ 
| 2009-02-03       | 
+--------------------------------------+ 
1 row in set (0.00 sec) 
0
SELECT STR_TO_DATE(dateString, '%d/%m/%y') FROM yourTable... 
Các vấn đề liên quan