簡體   English   中英

使用INSERT…SELECT與日期格式

[英]Using INSERT … SELECT with Date format

我在MySQL中使用INSERT ... SELECT查詢。 現在,在我的數據庫中有一個名為“ medDate”的列,用於我的葯品清單應用程序。 它的類型為Varchar,格式為“ 2014年7月”。 現在,我想使用insert ... select查詢來復制上個月的記錄。 但是,當我測試對MySQL的查詢時,出現一個錯誤,提示日期時間值不正確。 你能幫我嗎? 這是我的查詢。

INSERT INTO medicinesinventory (itemName, compCode, classID, 
 medDate, price, beginningIn, newIn, 
 outMed, sales) SELECT DISTINCT(itemName), 
 compCode, classID, CURDATE(), 
 price, 0.0, 0, 0.0, 0.0 
 FROM medicinesinventory 
 WHERE YEAR(medDate) = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y') 
 AND MONTH(medDate) = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH,  '%M %Y');

樣本數據

compCode medID classID medDate   itemname  price beginningIn newIn outMed sales
GOLDEN     148   20    July 2014 sample    0.00   0          0.00   0.00    6.00

函數year()month()需要日期。 您可以使用str_to_date()獲得日期,因為MySQL支持“部分”日期(即沒有日期的日期)。因此,請嘗試以下操作:

WHERE YEAR(str_to_date(meddate, '%M %Y')) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND
      MONTH(str_to_date(meddate, '%M %Y')) = MONTH(CURRENT_DATE  - INTERVAL 1 MONTH)

另外,您似乎想以相同的格式設置上個月的格式並進行比較。 這也可以工作:

WHERE medDate = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y') 

由於medDate是字符串而不是DATETIME,因此您不能在此列上使用YEAR,但是您可以將DATE_FORMAT轉換為右側,並且為了保持一致,應該以相同的格式存儲值。

INSERT INTO medicinesinventory (itemName, compCode, classID, 
 medDate, price, beginningIn, newIn, 
 outMed, sales) SELECT DISTINCT(itemName), 
 compCode, classID, 
 DATE_FORMAT(CURDATE(), '%M %Y'),  -- formatted this date
 price, 0.0, 0, 0.0, 0.0 
 FROM medicinesinventory 
 -- and converted those in the where clause
 WHERE medDate = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y')

注意

如果可以將medDate列的數據類型更改為DATE,那會更好。

YEAR()MONTH()函數對數據類型DATEDATETIMETIMESTAMP表達式進行操作。

如果將這些函數用於VARCHAR表達式,我相信MySQL將執行VARCHAR到DATE(或DATETIME)的隱式轉換,期望格式為'YYYY-MM-DD' (或'YYYY-MM-DD %h:%i:%s'

我認為這是引發“日期時間值錯誤”錯誤的地方。


只需使用生成要與'July 2014'匹配的VARCHAR值的表達式,然后比較VARCHAR值:

WHERE medDate = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y')

暫無
暫無

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

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