2016-03-26 3 views
0

Есть ли способ изменить имя столбца на текущую дату? Я не нуждаюсь в нем для динамического обновления по мере изменения даты - только даты, когда код был выполнен. Я попытался следующий код, но получаю ошибку синтаксисаПереименование столбца с текущей датой в MySQL

ALTER TABLE table_name CHANGE old_column_name CURDATE() DATE; 
+2

No. Но почему вы хотите назвать колонку, как это? Если вы считаете, что вам нужно это сделать, ваш дизайн базы данных крайне испорчен. Это очень проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Если вы добавляете столбцы для отдельных дней, ваша схема настолько нарушена, что SuperGlue не может ее исправить. –

+1

Не нарушайте правило [Zero, One или Infinity Rule] (http://en.wikipedia.org/wiki/Zero_one_infinity_rule) надлежащей [нормализации базы данных] (http://en.wikipedia.org/wiki/Database_normalization) , Это очень плохая идея. – tadman

+1

Какой формат вы ожидаете от такого имени столбца? Возможно, «суббота, 26 марта 2016 года» или «2016/03/26» и каков тип данных этой колонки? Наверняка не так. Можете ли вы представить себе путаницу колонки, озаглавленной 2016/03/26, которая представила другие даты. Или представьте себе путаницу такого запроса, как select 2016/03/26' из table_name, где '2016/03/26'> = '2016-03-26'. Это абсурдная идея. –

ответ

1

В операторе ALTER TABLE, новое имя столбца должно быть поставлены, как и любой другой идентификатор в тексте SQL.

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

То есть, SQL оператор отправки в базу данных необходимо будет иметь новое имя столбца на самом деле прописано, как часть заявления:

ALTER TABLE table_name CHANGE old_column_name new_column_name DATE 

Итак, короткий ответ на ваш вопрос: нет , это невозможно сделать в одном выражении SQL.


Очевидно, что вы можете выполнять операции на отдельных стадиях, чтобы получить текущую дату, а также создать строку, содержащую SQL заявление вы хотите выполнить. Кажется, вам кажется, что вам нужно будет определить текущее имя столбца, который вы хотите изменить.


Помимо вопроса, который был задан ...

Я с трудом fathoming на случай, когда использование что-то вроде этого будет соответствующее решение. Что такое проблема - этот тип функциональности пытается решить? Зачем вам нужно изменить имя столбца. Любые операторы SQL, которые ссылаются на столбец, также должны быть изменены. Не могли бы вы сохранить эту «дату» как значение в строке другой таблицы?

Единственное, что я могу думать, почему кто-то хотел бы сделать это, было бы ошибочной попыткой указать имя столбца в наборе результатов из запроса SELECT *.

0

Хотя это, вероятно, плохая идея, что вы собираетесь делать - можно с помощью prepared statement:

SET @stmt := CONCAT('ALTER TABLE table_name CHANGE old_column_name `', CURDATE(), '` DATE;'); 
PREPARE stmt from @stmt; 
EXECUTE stmt; 
Смежные вопросы