Php Mysql日期更新不工作
我在更新mysql表时遇到了一个问题。我有两个字段real_date(类型:varchar(20)),event_date(类型:date())。下面是一些数值Php Mysql日期更新不工作,php,mysql,sql,sql-update,Php,Mysql,Sql,Sql Update,我在更新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 我
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更新为如上所示。从实际日期中提取月份和日期,并将年份保留为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'
Query1:Update table set event_date=STR_TO_date(concat('1971','-',date格式(real_date,“%m-%d”),“%Y-%m-%d”),其中real_date不为NULL且real_date!='0000-00-00'和实际日期',事件日期='0000-00-00'
查询2:更新表集event_date=STR_TO_date(concat('1971','-',SUBSTR(real_date,6,5)),“%Y-%m-%d”),其中real_date不为NULL,real_date!='0000-00-00'和实际日期',事件日期='0000-00-00'
查询3:更新表集事件\u日期=concat('1971-',日期格式(实际日期,%m-%d)),其中实际日期不为空且实际日期!='0000-00-00'和实际日期',事件日期='0000-00-00'
但以上都不起作用。请帮帮我。使用或
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'
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'
更新表名
设置事件日期=CONCAT('1971-',日期格式(实际日期,%m-%d'))
其中实际日期不为NULL或
真正的约会0000-00-00'或
真实日期“”或
事件日期='0000-00-00'
这可能会对您有所帮助
update test set event_date = Date_format(Concat('1971','-', DATE_FORMAT( real_date, '%m-%d' ), '%Y', '%Y-%m-%d');
看看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'
更新表
设置事件日期=
截止日期(
CONCAT('1971-',日期格式(STR_TO_DATE(实际日期,'%Y-%m-%d'),'%m-%d')),
“%Y-%m-%d”
)
其中,real_date不为NULL,并且
真正的约会0000-00-00'和
真实日期“”和
事件日期='0000-00-00'
基本思想是:将现有字符串转换为日期。使用format从中提取月份和日期,并从中生成一个字符串。然后将新字符串转换为日期类型。您应该熟悉MySQL。也许您所有的更新代码都是正确的。实际上,它会更新表名中的事件日期
,但是当您想使用选择
语句来显示结果时,应该使用格式日期
来显示事件日期
所以不是
SELECT * FROM tableName
使用:
我的意思是在UPDATE
语句中,使用任何日期格式函数格式化日期字段是没有意义的。它仅在SELECT
语句中有意义。Ohh抱歉,忘记包含此查询。我试过这个,但它不工作,甚至我觉得这应该工作,但不幸的是,它没有更新任何行。在那里我可以获取这些数据。刚刚意识到问题所在。事实上,问题在于数据。。。带有日期格式的闰年的一些概念。否则,任何其他查询都会起作用。这将不起作用,因为concat()返回字符串,而event_date的数据类型是date()。@KumarSoneta请记住mysql是隐式的。因此,它悄悄地将字符串转换为日期。见小提琴@JW,请核对我的答案,我想知道你作为专家的意见。编辑我的帖子以删除无效分号。很抱歉。