我在更新mysql表时遇到一个问题。我有两个字段real_date(Type:varchar(20)),event_date(Type:date())。以下是几个值
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'
但以上都不奏效。请帮帮我。
答案 0 :(得分: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'
答案 1 :(得分:1)
这可能会对你有帮助。
update test set event_date = Date_format(Concat('1971','-', DATE_FORMAT( real_date, '%m-%d' ), '%Y', '%Y-%m-%d');
答案 2 :(得分: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()。
答案 3 :(得分:0)
也许您的所有更新代码都是正确的。实际上它会更新event_date
中的tablename
,但如果您想使用select
语句来显示结果,则应FORMAT_DATE
使用event_date
。
所以而不是
SELECT * FROM tableName
使用:
SELECT real_date,DATE_FORMAT(event_date,'%Y-%m-%d') FROM tableName
我的意思是在UPDATE
语句中使用任何日期格式函数来格式化日期coulmn字段是没有意义的。它只在SELECT
陈述中有意义。