2017-07-20 37 views
1

我試圖插入之前使一個MySQL觸發器:MySQL的觸發STR_TO_DATE(NEW.invoice_date, '%d /%M /%Y')

BEGIN 
    SET NEW.order_date = STR_TO_DATE(NEW.order_date, '%d/%m/%Y'); 
END 

但是當我導入包含記錄等將.csv 「2017/05/07」觸發器只輸入NULL

任何想法如何解決這個問題?

+0

在觸發這一點時,'order_date'已被強制轉換爲'date'。它不再是初始字符串形式。 – Phylogenesis

+0

因此,如果我將列order_date更改爲VarChar並創建新列,例如格式爲DATE的order_date_fixed,並且觸發器更改爲: BEGIN SET NEW.order_date = STR_TO_DATE(NEW.order_date_fixed,'%d /%m/%Y'); END 它會按照它的原理工作嗎? –

+0

只需在您的觸發器中省略轉換即可。 –

回答

0

在搜索過程中,這似乎是一個在不同地方被問了幾次的問題,但我找不到解釋原因的方法。

正如我在上面的評論中提到的,在適當轉換數據的過程中觸發器已經太晚了。

爲了讓觸發觸發器,數據必須已被轉換爲合適的數據類型以插入表中。

因此,在將數據傳遞到str_to_date()時,您只能強制使用date字段,而不是初始字符串。

兩種方法都可以解決這個問題:

  1. 修復文件中的日期格式導入
  2. 使用臨時varchar場導入,然後使用觸發器來此進行改造,以date
相關問題