【问题标题】:SQL-split a column and add the value to another columnSQL拆分一列并将值添加到另一列
【发布时间】:2017-02-09 16:06:01
【问题描述】:

我有一张像这样的桌子。它有数千行

Name       Address  LName
Mike_Cole  NewYork  Null

我想拆分名称并将姓氏添加到列LName

我的桌子应该是这样的:

Name       Address  LName
Mike_Cole  NewYork  Cole

【问题讨论】:

  • 您使用的是什么数据库系统?因为这会影响遮阳篷
  • 我使用的是 SQL 2016
  • 总是First_Last,还是可以有多个下划线?如果可以,应该如何处理?
  • 可以有多个下划线。我可以将所有内容放在 LName 列中的第一个下划线之后。
  • 试试这个 select Name,Address,SUBSTRING(Name,CHARINDEX('_', Name),LEN(Name)) as Lname from Table

标签: sql sql-server split sql-server-2016


【解决方案1】:

如果你想要第一个下划线之后的所有内容,你可以这样做:

update t
    set LName = substring(name, charindex('_', name + '_') + 1, len(name);

【讨论】:

  • 戈登,感谢您的快速回答。非常感谢。
  • 如果我想要 _ 字符左侧的任何内容,命令应该是什么?我正在尝试更新联系人集 FName= (left(SupportTopic, charindex('\', SupportTopic)-1))
  • 它抱怨“传递给 LEFT 或 SUBSTRING 函数的长度参数无效。”没有 -1,它可以工作
  • 我正在尝试更新联系人集 FName= (left(name, charindex('\', name)-1))
  • @user2469235 。 . .只能回答您提出的问题。在 cmets 中更改问题是不公平的。
【解决方案2】:

如果是 sql server 你可以使用

  select name, addres RIGHT(name,LEN(name)-CHARINDEX('_',name)) lname
  from your_table 

【讨论】:

    【解决方案3】:
    UPDATE table_name SET  LName = RIGHT(Name,LEN(Name) - CHARINDEX('_', Name))
    

    但是,这假设名称中只有 1 个下划线!

    这是一个更好的解决方案:

     UPDATE table_name SET  LName = RIGHT(Name,CHARINDEX('_', REVERSE(Name)) - 1)
    

    还要得到名字:

     UPDATE table_name SET  FName = LEFT(Name,CHARINDEX('_', Name) - 1)
    

    【讨论】:

    • 当我添加 -1 时,它会给出错误“传递给 LEFT 或 SUBSTRING 函数的长度参数无效。”
    • 当尝试使用语句 UPDATE table_name SET FName = LEFT(Name,CHARINDEX('_', Name) - 1) 提取 firstName 时,它​​给出错误“传递给 LEFT 的长度参数无效或SUBSTRING 函数。”
    • 你有没有_字符的数据吗?
    • 嗨 Andrew,我意识到我确实有没有 _ 字符的字符串。是否可以为这些行选择完整的值?
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多