0

我在更新 mysql 表时遇到了一个问题。我有两个字段 real_date(类型:varchar(20)),event_date(类型: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'

但以上都不起作用。请帮我。

4

4 回答 4

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'
于 2013-03-12T05:37:50.850 回答
1

这可能会对您有所帮助。

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

参见 sql fiddle 演示

于 2013-03-12T05:45:51.317 回答
0

也许您所有的更新代码都是正确的。实际上它会event_date在你的中更新tablename,但是当你想使用select语句来显示结果时,你应该使用FORMAT_DATEfor event_date

所以而不是

SELECT * FROM tableName

利用:

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

我的意思是在UPDATE声明中使用任何日期格式函数来格式化日期字段是没有意义的。仅在SELECT声明中才有意义。

于 2013-03-12T07:26:11.233 回答
0

看看 MySQL日期和时间函数

尝试这个:

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()

于 2013-03-12T06:01:59.457 回答