经过一番搜索后,我发现了一些我用过的答案,试图解决我的问题,但到目前为止还没有成功。
我有一个名为company_details的列表。每个字段都有不同的字符串内容,但它们都在某处有两个字之间的部分。我想找到文本的这一部分,并用通讯员发现的文本更新通讯字段。
在论坛的其他答案中,我设法让专栏之间的文字在"这个"和#34;那"就像我建立的例子一样:
SELECT SUBSTRING(
sentence,
LOCATE('this', sentence),
LOCATE('that', sentence) - LOCATE('this', sentence))
FROM (SELECT "Hello this is a test, will finish that. For some reason..." AS sentence) test;
结果(选择"你好这是一个测试,将完成。由于某种原因......")是:'这是一个测试,将完成'
到目前为止一切顺利,现在我想查看所有表并获取字段值,选择子字符串并将字段更新为新值。
所以我试图使用此查询:
UPDATE compdata
SET company_details=(SELECT SUBSTRING(
sentence,
LOCATE('this', sentence),
LOCATE('that', sentence) - LOCATE('this', sentence))
FROM (SELECT company_details AS sentence from compdata) teste);
我收到错误:
"错误代码:1242。子查询返回超过1行",
女巫我可以理解为什么,在Select Substring上有多个结果。 (我可以发誓昨天这个查询运行并且工作正常)。 我现在可以使用LOOP或其他东西,但我被卡住了,任何解决方案都会受到赞赏,因为应该像一年一样运行性能不是一个大问题,桌子上只有59K行
答案 0 :(得分:2)
您可以使用不带子选择的简单更新
UPDATE compdata
SET company_details= SUBSTRING(
company_details,
LOCATE('this', company_details),
LOCATE('that', company_details) - LOCATE('this', company_details))