繁体   English   中英

如何使用子查询更新 Mysql 查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM