【问题标题】:Remove trailing comma删除尾随逗号
【发布时间】:2021-01-25 19:48:59
【问题描述】:

我有一个名称格式为“Smith, Stan”的表格,需要将它们显示为“Stan Smith”。我能够做到这一点,但似乎逗号已被遗忘,我需要摆脱它。 这是我目前拥有的:

SELECT SUBSTRING(Name, CHARINDEX(',', Name) + 1, LEN(Name)) + ' ' +
SUBSTRING(Name, 1, CHARINDEX(',', Name)) AS NewName
FROM Employees

【问题讨论】:

  • 请出示原始起始数据。
  • -1 添加到您的查询中:.... + SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1) AS NewName
  • 请阅读this,了解一些改进问题的技巧。不使用图片的原因是here。提供 DDL 和示例输入有助于我们为您提供帮助。

标签: sql sql-server tsql replace


【解决方案1】:

如下使用替换怎么样

SELECT SUBSTRING(Name, CHARINDEX(',', Name) + 1, LEN(Name)) + ' ' +
REPLACE(SUBSTRING(Name, 1, CHARINDEX(',', Name)),',','') AS NewName
FROM Employees

【讨论】:

    【解决方案2】:

    假设所有行都包含逗号:

    SELECT LEFT(Name, CHARINDEX(',', Name)-1) + ' ' +
           RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)-1) AS NewName
    FROM Employees
    

    更新

    如果您的Name 列包含尾随空格,请将LEN 更改为DATALENGTH。如果是 ncharnvarchar 列,请使用 DATALENGTH 但除以 2:

    -- if Name is char/varchar
    SELECT LEFT(Name, CHARINDEX(',', Name)-1) + ' ' +
           RIGHT(Name, DATALENGTH(Name) - CHARINDEX(',', Name)-1) AS NewName
    FROM Employees
    
    -- in Name is nchar/nvarchar
    SELECT LEFT(Name, CHARINDEX(',', Name)-1) + ' ' +
           RIGHT(Name, DATALENGTH(Name)/2 - CHARINDEX(',', Name)-1) AS NewName
    FROM Employees
    

    【讨论】:

    • 如果名称有尾随空格,因为 LEN() 会忽略它们(尝试使用类似“Smith,Dave”的名称。@Luuk 在原始帖子中的评论会起作用。
    • 通过将len 更改为datalength(或datalength / 2,在nvarchar 的情况下)很容易修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2021-05-16
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多