`select parseDateTimeBestEffort('01/12/2017, 18:31:44')`

It is confused by a comma - should be easy to fix.
return on_error("Cannot read DateTime: unexpected number of alphabetical characters after day of month: " + toString(num_alpha), ErrorCodes::CANNOT_PARSE_DATETIME);
                          if (!read_alpha_month(alpha))
                              return on_error("Cannot read DateTime: alphabetical characters after day of month don't look like month: " + std::string(alpha, 3), ErrorCodes::CANNOT_PARSE_DATETIME);
                        }
                        else
                          return on_error("Cannot read DateTime: unexpected number of decimal digits after day of month: " + toString(num_digits), ErrorCodes::CANNOT_PARSE_DATETIME);
                    }
                    if (month > 12)
                        std::swap(month, day_of_month);
                    if (checkChar('/', in) || checkChar('.', in) || checkChar('-', in))
                    {
                        if (year)
                            return on_error("Cannot read DateTime: year component is duplicated", ErrorCodes::CANNOT_PARSE_DATETIME);
                        num_digits = readDigits(digits, sizeof(digits), in);
                        if (num_digits == 4)
                            readDecimalNumber<4>(year, digits);
                        else if (num_digits == 2)
                        {
                            readDecimalNumber<2>(year, digits);
                            if (year >= 70)
                                year += 1900;
                            else
                                year += 2000;
                        }
                        else
                            return on_error("Cannot read DateTime: unexpected number of decimal digits after day of month and month: " + toString(num_digits), ErrorCodes::CANNOT_PARSE_DATETIME);
                    }
                }
                else
                {