2011-03-03 81 views
2

我有一個表格,用於保存商店中店鋪顯示的安裝日期信息。每個店鋪展示都有一定的保修期,可以是6個月,1年,2年等,我在另一個表中保存爲「6個月」,「1年」,「2年」等。將字符串視爲MySQL語句?

是否可以使用單個MySQL查詢計算每個商店展示的到期日期?我期待這樣的事情:

SELECT t1.install_date, (t1.install_date + INTERVAL t2.period) as expiry_date FROM t1, t2

所以,我基本上是試圖處理字符串值,我從t2表獲得像MySQL聲明的一部分。這可能嗎?對於我的查詢,MySQL不會給出任何錯誤,但會顯示如下所示的expiry_date列中的值:「20110228」,「20110224」,表示t1.install_date「2011-02-28」,「2011-02-24」 。

回答

1

這比我想象的更難,因爲DATE_ADD將不接受字符串作爲INTERVAL單位。因此,我想出的解決方案是動態地將所有YEAR的值與12個月的乘積相乘。

此外,您需要指定連接條件,否則您將計算兩個表的整個笛卡爾乘積的間隔。

SELECT t1.install_date, DATE_ADD(t1.install_date, 
           INTERVAL IF(SUBSTRING_INDEX(t2.period,' ','-1')='YEAR',   
              SUBSTRING_INDEX(t2.period,' ','1')*12, 
              SUBSTRING_INDEX(t2.period,' ','1')) 
              MONTH) as expiry_date 
FROM t1,t2 WHERE t1.id = t2.id 
+0

噢,天啊,這種方法正是我所需要的!爲了擺脫調用SUBSTRING_INDEX每次我將保證期拆分爲兩列:數字和句點,所以最終版本看起來像這樣:'SELECT t1.install_date,DATE_ADD(t1.install_date,INTERVAL (IF(t2.interval_period ='YEAR',t2.interval_number * 12,t2.interval_number))MONTH)AS expiry_date ...'非常感謝! – parrker9 2011-03-03 17:49:37

相關問題