【问题标题】:Set column to a concatenated value from another table将列设置为来自另一个表的连接值
【发布时间】:2014-07-08 21:56:30
【问题描述】:

我在 SQL Server 2008 中有 2 个表:

Address:

nameid | e-mail
---------------
1      | xyz@abc.com
2      | fgh@asdf.com
3      | 123@doremi.com

Member:

nameid | memberid
---------------
1      | 456
2      | 457
3      | 458

我需要将电子邮件设置为[memberid]@test.com,记住电子邮件是varcharmemberidint

【问题讨论】:

  • 你是说每个成员都会有@test.com
  • 是的,他们的 memberid@test.com
  • address 表有什么意义吗?

标签: sql sql-server sql-server-2008 join concatenation


【解决方案1】:

这是你要找的吗?

update a
    set email = cast(m.memberid as varchar(255)) + '@test.com'
    from address a join
         member m
         on a.nameid = m.nameid;

【讨论】:

    【解决方案2】:
    SELECT A.nameid 
          ,CAST(M.memberid AS NVARCHAR(20)) + 
               RIGHT([e_mail], LEN([e_mail]) - CHARINDEX('@', [e_mail])+1) AS New_Column
    FROM [address] A INNER JOIN [member] M
    ON A.nameid = M.nameid 
    

    用他们的 MemberID 简单地硬编码@test.com 相当简单

    SELECT A.nameid 
          ,CAST(M.memberid AS VARCHAR(20)) + '@test.com' AS New_Column
    
    FROM [address] A INNER JOIN [member] M
    ON A.nameid = M.nameid 
    

    【讨论】:

    • 看到memberidint - 为什么要将其转换为nvarchar?数字真的不需要 Unicode 表示......我看不出有任何理由或从中受益 - 特别是因为 OP 说emailvarchar。似乎您在加入两者时会造成不必要的隐式强制转换 ....
    【解决方案3】:

    我猜你可以根据 cmets 使用它...

    SELECT CONVERT(VARCHAR(50), memberid) + '@Test.com' FROM member
    

    【讨论】:

      【解决方案4】:

      如果我正确理解您的问题,我认为您正在寻找的是:

      SELECT CAST(memberid AS VARCHAR(10)) + '@test.com'
      

      【讨论】:

      • CONCAT 是 SQL Server 2012 中的一个新函数,因此运行 SQL Server 2008 的人无法使用 ....
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多