[英]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.