SQL Select Query с одним полем как отформатированный, а остальные поля как подстановочный знак - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь извлечь записи из таблицы в MySQL 5.5 (Community Server), которая имеет в общей сложности 22 поля, первое поле имеет тип DATETIME, и я хочу, чтобы это поле было отформатировано методом DATE_FORMAT(), аЯ хочу получить оставшиеся поля, как они есть.В общем, я пытаюсь сделать что-то вроде этого

SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y'),* FROM userdetails;

Хотя я знаю, что это неверный синтаксис, и в настоящее время я выполняю это, выбирая все оставшиеся поля вручнуючто, очевидно, делает запрос длиннее.Так есть ли более элегантный способ сделать то же самое?Я также подумал использовать два разных запроса, где 1-й извлечет отформатированную дату, а второй будет обычным

SELECT * FROM userdetails;

Но так как я выбираю записи, отсортированные по самому полю даты, я предполагаю использовать дваразличные запросы могут привести к конфликтам в порядке возврата записей.

Ответы [ 5 ]

2 голосов
/ 14 марта 2011

Почему вы не делаете форматирование даты в коде приложения?Пусть база данных обрабатывает данные, а приложение - презентацию.

2 голосов
/ 14 марта 2011

Вы можете использовать

SELECT  DATE_FORMAT(fdate,'%r %d-%m-%Y'), ud.*
FROM    userdetails ud

, который будет выбирать все столбцы (включая исходный fdate) вместе с форматированным значением.

Невозможно выбрать "почти все столбцы""кроме перечисления их явно.

1 голос
/ 14 марта 2011

В MySQL вы можете изменить его и поставить * сначала, а затем столбцы, которые вы хотите указать. Вы просто получите два fdate столбца. Если вы используете хеши в perl или ассоциативных массивах в PHP, или эквивалент в других языках, для извлечения строк, то в конечном итоге этот индекс будет перезаписан.

Лучший способ справиться с этим - назвать столбец:

SELECT *, DATE_FORMAT(fdate,'%r %d-%m-%Y') AS formatted_date FROM userdetails;

Теперь у вас есть два столбца даты, вы просто использовали именованный столбец, когда хотите использовать дату.

0 голосов
/ 14 марта 2011
SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y') AS `formattedDate` , * FROM userdetails;

Это должно сработать. Не могу понять, почему ваша первая попытка не удалась, вы должны проверить имена полей, которые она возвратила - возможно, вы найдете одно с именем DATE_FORMAT (....

0 голосов
/ 14 марта 2011
DATA_FORMAT(fdate,'%r %d-%m-%Y').....

не будет работать

DATE_FORMAT(fdate,'%r %d-%m-%Y')....
...