Как установить функцию «MONTHNAME ()» в качестве столбца по умолчанию в MySQL? - PullRequest
0 голосов
/ 21 ноября 2018

На самом деле Мне нужно имя текущего месяца в виде строчной буквы в качестве значения по умолчанию в одном из столбцов таблицы;Таблица БД может выглядеть так:

name : john
joined : january

Когда я пытаюсь использовать функцию mysql LOWER( MONTHNAME( NOW() ) ) в качестве значения по умолчанию, это вызывает ошибку.Кстати, я не заинтересован в создании триггеров.

какие-нибудь магические запросы для этого?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Вы можете попробовать ниже

CREATE TABLE orderdata (

    order_date DATE
  , order_month VARCHAR(50) AS (lower(MONTHNAME(order_date))) 

);
0 голосов
/ 21 ноября 2018

Если вы используете MySQL 8.0 или новее, то ответы, предоставленные @TimBiegeleisen и @ fa06, должны решить проблему.В противном случае

... значение по умолчанию, указанное в предложении DEFAULT, должно быть литеральной константой;это не может быть функция или выражение.

См. подробности в документации .

Итак, для предыдущих версий вам нужно найтипо-другому.Например, вы можете определить триггер , который устанавливает значение по умолчанию для столбца, если значение не указано:

CREATE TABLE MyTable (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  joined  VARCHAR(12)
);

CREATE TRIGGER defaultMonth
BEFORE INSERT ON MyTable
FOR EACH ROW 
SET NEW.joined = IFNULL(NEW.joined, LOWER(MONTHNAME(NOW())));

См. Также живой пример для предлагаемогорешение.

0 голосов
/ 21 ноября 2018

Из документации MySQL :

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

Итак, должно работать следующее:

CREATE TABLE yourTable (
    month_name VARCHAR(12) DEFAULT (LOWER(MONTHNAME(NOW())))
    ...
)

Как указывал @Madhur, использование выражения по умолчанию будет работать только в MySQL 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...