【问题标题】:first letters in firstname and lastname uppercase名字和姓氏中的第一个字母大写
【发布时间】:2023-03-31 13:32:01
【问题描述】:

假设我有一张满是名字的表格。

firstname.lastname 在一个单元格中。

如何将这些分隔为“Firstname Lastname”,首字母大写?使用 TSQL

示例:

mike.mikeson -> 迈克·迈克森

katy.lumberjack -> 凯蒂伐木工

【问题讨论】:

  • 我们可以信任这种格式吗?是否始终是名字,后跟一个空格,然后是姓氏?
  • 添加一些示例表数据,以及预期的结果。包括柯南奥布莱恩、麦当劳叔叔和其他异国名字。
  • 很高兴看到你自己尝试了什么。
  • 标题大小写的另一个选项msdn.microsoft.com/en-us/library/…

标签: sql sql-server tsql


【解决方案1】:

其中一次我们可以使用ParseName 函数为我们谋福利;-)

SELECT original_value
     , forename
     , surname
     , Upper(SubString(forename, 1, 1)) + Lower(Substring(forename, 2, 8000)) AS formatted_forename
     , Upper(SubString(surname , 1, 1)) + Lower(Substring(surname , 2, 8000)) AS formatted_surname
FROM   (
        SELECT name AS original_value
             , ParseName(name, 2) AS forename
             , ParseName(name, 1) AS surname
        FROM   (
                VALUES ('mike.mikeson')
                     , ('katy.lumberjack')
               ) AS users (name)
       ) AS step1

【讨论】:

    【解决方案2】:

    以下内容将按原样回答您的问题,但正如 cmets 所指出的,您可能还需要考虑在任一部分中包含多个大写字母的名称,例如 Mary-Anne McDonald,或者只是不使用的名称'不符合你的约定。

    declare @a table (Name nvarchar(50))
    insert into @a values
     ('fred.bloggs')
     ,('john.doe')
     ,('alan.smith')
    
    select Name
        ,upper(left(Name,1))
            + substring(Name,2,charindex('.',Name,1)-2)
            + ' '
            + upper(substring(Name,charindex('.',Name,1)+1,1))
            + right(Name,len(Name) - charindex('.',Name,1)-1)
            as FormattedName
    from @a
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用 concat 和 substring ,如下所示

      declare @name varchar(50) = 'firstname.lastname'
      
      select case when charindex('.',@name) > 0 then  concat(upper(left(@name,1)), substring(@name,2,charindex('.',@name)-2), ' ', upper(substring(@name,charindex('.',@name)+1,1)), substring(@name,charindex('.',@name)+2, len(@name)))
                  else concat(upper(left(@name,1)), substring(@name,2,len(@name))) end 
      

      【讨论】:

        猜你喜欢
        • 2014-08-21
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2018-02-28
        • 2021-05-05
        相关资源
        最近更新 更多