簡體   English   中英

如何在MySQL中將“ MONTHNAME()”函數設置為列默認值?

[英]How do I set “MONTHNAME()” function as column default in MySQL?

實際上, 我需要在表列之一中將當前月份名稱作為小寫字符串作為默認值。 數據庫表可能看起來像:

name : john
joined : january

當我嘗試使用mysql函數LOWER( MONTHNAME( NOW() ) )作為默認值時,這給了我錯誤。 順便說一句,我對創建觸發器不感興趣。

任何魔術查詢可以做到這一點?

從MySQL 文檔

除一個例外,將表達式默認值括在括號內,以將其與文字常量默認值區分開。

因此,以下應工作:

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

正如@Madhur指出的那樣,使用表達式作為默認值僅適用於MySQL 8及更高版本。

如果使用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())));

有關建議的解決方案,另請參見實時示例

您可以在下面嘗試

CREATE TABLE orderdata (

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

);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM