【问题标题】:update specific column of mysql table更新mysql表的特定列
【发布时间】:2014-08-13 19:18:27
【问题描述】:

我在mysql中有一个相当大的表,我需要更改与该列相关的所有记录。

记录是这样的:

/name/nm0000209/?ref_=ttfc_fc_cl_t1, 
/name/nm0000151/?ref_=ttfc_fc_cl_t2, 
...,  
/name/nm0104594/?ref_=ttfc_fc_cl_t10

我想要的是只保留中间的字符串 nm0000209, nm0000151,.... 我知道如何通过 REPLACE 或 Trim 从单词的右侧或左侧删除特定字符, ..,但我的问题是,在这种情况下,字符串第三部分中的字符数不相等(如您所见,当它达到 10 时,我必须从末尾删除 21 个字符而不是 20 个字符,因为这个表包含很多我不知道怎么做的记录。

如果有人能帮助我,我真的很感激,

谢谢

【问题讨论】:

  • 你试过更新语句了吗? UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;
  • 那么,您当前的表在目标字段中有/name/nm0000209/?ref_=ttfc_fc_cl_t1,您需要清理它并只留下 nm00000209 部分吗?因为我很困惑您引用的字符串是否已经在数据库中或者您尚未解析的请求
  • 这可能会有所帮助:“用子字符串填充列”stackoverflow.com/questions/15644317/…
  • @amenadiel 是的,完全正确!我的表中有 /name/nm0000209/?ref_=ttfc_fc_cl_t1,我只需要 nm0000209

标签: mysql replace sql-update trim


【解决方案1】:

一种方法是使用 MYSQL 的 SUBSTRING_INDEX 函数。它会让你得到最后一个斜线之后的任何东西。或者在倒数第二个之后。

针对您的特殊情况

select 
  SUBSTRING_INDEX(SUBSTRING_INDEX(thefield,'/',-2 ),'/', 1) 
from supertext

会产生预期的结果

编辑:用于更新目的

 UPDATE thetable 
 SET thefield=SUBSTRING_INDEX(SUBSTRING_INDEX(thefield,'/',-2 ),'/', 1) 

【讨论】:

  • 查看我的编辑。 @Ravinder 如果你所有的字符串都以'name'开头也很好
【解决方案2】:

我想要的是只保留中间的字符串 nm0000209, nm0000151...

您可以在列上使用'SUBSTRING_INDEX' 来裁剪部分列值。

以下示例假设所述列将以'name/' 作为起始模式。

示例

update table_name
 set column_name = substring_index( 
                       substring_index( column_name, 'name/', -1 )
                     , '/', 1 );

相同的值可用于更新。

演示 @MySQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2020-04-30
    • 1970-01-01
    • 2014-04-02
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多