I have a varchar field that looks like (sadly I have no control over the data):
Fri, 30 Oct 2009 06:30:00 EDT
Is there a way to cast this into a timestamp format so that I can then sort based on it?
I have a varchar field that looks like (sadly I have no control over the data):
Fri, 30 Oct 2009 06:30:00 EDT
Is there a way to cast this into a timestamp format so that I can then sort based on it?
Have you tried:
SELECT [...], CAST(varchar_field as DATETIME) as converted FROM [...]
See manual entry for cast here.
If that doesn't work, you can try the str_to_date function. This function takes a string and a format description and converts it to a date-value. These are the formatting values you can use:
%a Abbreviated weekday name (Sun..Sat) %b Abbreviated month name (Jan..Dec) %c Month, numeric (0..12) %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …) %d Day of the month, numeric (00..31) %e Day of the month, numeric (0..31) %f Microseconds (000000..999999) %H Hour (00..23) %h Hour (01..12) %I Hour (01..12) %i Minutes, numeric (00..59) %j Day of year (001..366) %k Hour (0..23) %l Hour (1..12) %M Month name (January..December) %m Month, numeric (00..12) %p AM or PM %r Time, 12-hour (hh:mm:ss followed by AM or PM) %S Seconds (00..59) %s Seconds (00..59) %T Time, 24-hour (hh:mm:ss) %U Week (00..53), where Sunday is the first day of the week %u Week (00..53), where Monday is the first day of the week %V Week (01..53), where Sunday is the first day of the week; used with %X %v Week (01..53), where Monday is the first day of the week; used with %x %W Weekday name (Sunday..Saturday) %w Day of the week (0=Sunday..6=Saturday) %X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V %x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v %Y Year, numeric, four digits %y Year, numeric (two digits) %% A literal “%” character %x x, for any “x” not listed above
SELECT STR_TO_DATE('Fri, 30 Oct 2009 06:30:00 EDT', '%a, %d %b %Y %H:%i:%s EDT')
Use STR_TO_DATE
But keep in mind that this is inefficient for a large number of rows.
mysql> SELECT STR_TO_DATE("Fri, 30 Oct 2009 06:30:00 EDT", "%a, %e %b %Y %H:%i:%S EDT");
+---------------------------------------------------------------------------+
| STR_TO_DATE("Fri, 30 Oct 2009 06:30:00 EDT", "%a, %e %b %Y %H:%i:%S EDT") |
+---------------------------------------------------------------------------+
| 2009-10-30 06:30:00 |
+---------------------------------------------------------------------------+
1 row in set (0.03 sec)