[英]How to update Mysql query with subquery
我有一个字段 LastScanDate (varchar),我需要它来更新 ScanDate (DateTime)。 当我单独运行时,子查询 t2 工作正常。
但是当我尝试使用它来更新 Scandate 时,出现错误“#1064 - 您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,以获取在 'SELECT CONCAT(yr,"-",m,"-",d," ", h,":",mit) 附近使用的正确语法作为 recdate from (在第 6 行选择 y'"
UPDATE test as t1
set t1.ScanDate = recdate
(
SELECT
CONCAT(yr,"-",m,"-",d," ", h,":",mit) as recdate
from
(Select
year(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")) AS yr,
MONTH(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")) AS m,
Day(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")) AS d,
Hour(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")) AS h,
Minute(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")) AS mit,
ID,
ScanDate
FROM test
WHERE ScanDate IS NULL
) as t2
)
where t1.ID = t2.ID
您的查询确实让您看起来想要更新同一表和同一行上的值。
如果是这样,并假设您的字符串确实是与您指定的格式相对应的日期,您可以这样做:
update test
set scandate = str_to_date(lastscandate, '%m/%d/%Y %H:%i')
where scandate is null
这段代码是有效的;
update test
set ScanDate =
CONCAT
(year(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")),
"-",
MONTH(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")),
"-",
Day(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i")),
" ",
if (right(LastScanDate,2) = "PM", Hour(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i"))+12,Hour(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i"))),
":",
Minute(STR_TO_DATE(`LastScanDate`, "%m/%d/%Y %H:%i"))
)
where ScanDate is null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.