2013-03-12 138 views
0

我在更新mysql表時遇到了一個問題。我有兩個字段real_date(類型:varchar(20)),event_date(類型:日期())。下面是幾個值Mysql日期更新不起作用

real_date event_date event_date(Need to b updated.) 
1985-03-20 0000-00-00 1971-03-20 
1989-08-20 0000-00-00 1971-08-20 
1993-04-30 0000-00-00 1971-04-30 

我想更新EVENT_DATE到如上圖所示。從real_date獲取月份和日期,並將年份保留爲1971年。我正在使用下面的查詢,但它不起作用您能否幫助我。

Query1 : Update table set event_date= STR_TO_DATE(concat('1971','-',DATE_FORMAT(real_date, "%m-%d")),'%Y-%m-%d') where real_date IS NOT NULL AND real_date != '0000-00-00' AND real_date <> '' AND event_date='0000-00-00' 

Query2 : Update table set event_date= STR_TO_DATE(concat('1971','-',SUBSTR(real_date, 6, 5)),'%Y-%m-%d') where real_date IS NOT NULL AND real_date != '0000-00-00' AND real_date <> '' AND event_date='0000-00-00' 

Query3 : Update table set event_date=concat('1971-',DATE_FORMAT(real_date, "%m-%d")) where real_date IS NOT NULL AND real_date != '0000-00-00' AND real_date <> '' AND event_date='0000-00-00' 

但是以上都不起作用。請幫幫我。

回答

1

使用OR

UPDATE TableName 
SET event_date = CONCAT('1971-', DATE_FORMAT(real_date, '%m-%d')) 
WHERE real_date IS NOT NULL OR 
     real_date != '0000-00-00' OR 
     real_date <> '' OR 
     event_date = '0000-00-00' 
+0

這不起作用,因爲concat()返回字符串,而event_date的數據類型是date()。 – 2013-03-12 05:49:13

+0

@KumarSoneta記得mysql是隱含的。所以它默默地將字符串轉換爲日期。請參閱小提琴http://www.sqlfiddle.com/#!2/00a13/1 – 2013-03-12 05:55:58

+0

@JW。 ,請檢查我的答案,我想知道您的意見作爲專家 – Amir 2013-03-12 09:01:15

1

這可能會幫助你。

update test set event_date = Date_format(Concat('1971','-', DATE_FORMAT(real_date, '%m-%d'), '%Y', '%Y-%m-%d'); 

See sql fiddle demo

+0

哦,抱歉忘了包含此查詢。我試過這個,但它不起作用 – 2013-03-12 05:48:11

+0

即使我覺得這應該工作,但不幸的是它不會更新任何行。我可以在哪裏獲取這些數據。 – 2013-03-12 05:52:11

+0

@KumarSoneta看我的編輯。添加日期格式() – Dhinakar 2013-03-12 05:56:44

0

看看MySQL的Date and time functions

試試這個:

UPDATE table 
SET event_date = 
    STR_TO_DATE(
    CONCAT('1971-', DATE_FORMAT(STR_TO_DATE(real_date, '%Y-%m-%d'), '%m-%d')), 
    '%Y-%m-%d' 
) 
WHERE real_date IS NOT NULL AND 
    real_date != '0000-00-00' AND 
    real_date <> '' AND 
    event_date = '0000-00-00' 

的基本思路是:現有的字符串轉換爲日期。使用格式從中抽出月份和日期,並從中取出一個字符串。然後將新字符串轉換爲DATE類型。你應該熟悉MySQL DATE_FORMAT()

+0

糟糕。編輯我的帖子以刪除無效的分號。對於那個很抱歉。 – Aiias 2013-03-12 06:22:19

0

也許你的所有更新代碼都是正確的。實際上,它更新event_date在您的tablename,但是當您想要使用select語句顯示結果時,您應該使用FORMAT_DATEevent_date

所以不是

SELECT * FROM tableName 

用途:

SELECT real_date,DATE_FORMAT(event_date,'%Y-%m-%d') FROM tableName 

我的意思是在UPDATE說法是沒有意義的使用任何日期格式的功能用於格式化日期coulmn場。只是在SELECT聲明中有意義。