【问题标题】:Update one column from substring of another column从另一列的子字符串更新一列
【发布时间】:2013-06-14 17:26:08
【问题描述】:

我有一个现有列,我想提取其中的一个子集并插入到同一个表中的第二个(新)列中。

例如MyTable.[FullName](现有列)包含类似“P-13-146 PS - Goodyear - Tire repair”的字符串

我创建了一个新列 MyTable.[ShortName],我想将第一列中的值的子字符串插入 ("P-13-146 PS")。问题是每个全名的子字符串长度不同。唯一真正的一致性是我最多需要第二个空格字符。

我正在尝试解决以下问题:

UPDATE [MyTable] SET [ShortName] = ???

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    试试这个:

    declare @exp varchar(200)
    set @exp='P-13-146 PS - Goodyear - Tire repair'
    
    select RTRIM(SUBSTRING(@exp,1,CHARINDEX(' ',@exp,charindex(' ',@exp)+1)))
    

    【讨论】:

    • 对您的代码进行少量编辑,它运行良好!谢谢!只是等待计时器过去,所以我可以将您的响应设置为答案 UPDATE [MyTable] SET [ShortName] = RTRIM(SUBSTRING([Name],1,CHARINDEX(' ',[Name],charindex(' ',[姓名])+1)))
    • 如果 FullName 的空格少于两个,则返回一个空字符串。
    【解决方案2】:

    只需组合字符串操作函数,直到得到你想要的:

    SELECT 
    CASE WHEN CHARINDEX(' ',FullName, CHARINDEX(' ', FullName)+1) = 0 THEN FullName
    ELSE SUBSTRING(FullName, 1, CHARINDEX(' ',FullName, CHARINDEX(' ', FullName)+1)-1)
    END ShortName
    FROM MyTable
    

    CASE 语句的第一部分用于包含少于两个空格的名称。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2022-07-06
      • 2018-09-23
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2018-09-13
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多