【问题标题】:SQL server trimming stringSQL 服务器修剪字符串
【发布时间】:2018-09-19 07:25:01
【问题描述】:

我有一个查询,我想修剪一列并获取唯一的右侧值:

在图片中,结果类似于SubAccountCodeSubaccountName,但用户在SubaccountName 中输入了代码和名称。我想从Subaccountname 中修剪代码并更新表格。 T

下面提到了我尝试过的查询,但我认为它不是那么有效:

 Select Substring(Subaccountname,8,20)as Name from #temp

【问题讨论】:

  • 欢迎来到 StackOverflow!您能否请edit您的问题并添加更多信息。您能否向我们提供您自己已经尝试过的查询。
  • 你想在第一个空格处修剪 varchar 吗?

标签: sql sql-server trim


【解决方案1】:

有几种方法可以做到这一点。 查看示例数据时,最简单的方法是在更新语句中使用 replace()

语法: REPLACE ( string_expression , string_pattern , string_replacement )

例子:

UPDATE table_name
SET column2 = replace([column2], [column1], '')

它的作用是用 column2 中的值更新 column2,其中 column1 中的值被替换为 '' nothing。在您的示例中,这确实给您留下了前面不需要的空间。您可以修剪或尝试如下:

UPDATE Test
SET [SubAccountName] = replace([SubAccountName], [SubAccountCode] + ' ', '')

如果 SubAccountCode 可能与 SubAccountName 中的代码不同,并且您只想删除前 8 个字符(如果您确定它始终是前 8 个),您可以使用:

UPDATE YourTable SET SubAccountName = RIGHT(SubAccountName, LEN(SubAccountName) - 7)

示例脚本:

create table test (
    SubAccountName varchar(100),
    SubAccountCode varchar(100)
    )

insert into test (SubAccountCode, SubAccountName) VALUES
(1234567, '1234567 AUBC' ),
(1234467, '1234467 AUBC' ),
(1235567, '1235567 AUBC' )

select * from test -- Check that the data is like your example.

UPDATE Test SET SubAccountName = RIGHT(SubAccountName, LEN(SubAccountName) - 8)

select * from test -- Check that the result is like your wanted result.

drop table test -- Cleanup the test table.

【讨论】:

  • 这个答案部分正确。当 subaccountname 列中的 subccountcode 匹配但 subaccountname 系列不同时,它工作正常,例如“IMP178”且 subaccountname 为“KGW0076 VINEET KUMAR”。此查询未正确更新值。
  • 阅读您的问题时,这正是您要问的。您说用户输入了他们的代码 + 用户名,您想删除该代码。
  • 我想要一个查询,我想在其中修剪字符串中的前七个字符。例如。字符串为“KGW0074 VIJAY KUMAR JHA”,输出应仅为“VIJAY KUMAR JHA”。
  • 传递给 RIGHT 函数的长度参数无效。声明已终止。
  • 请使用更新的信息编辑您自己的问题。
【解决方案2】:

此代码适用于您。

UPDATE TableName SET SubaccountName = REPLACE(LTRIM(RTRIM(SubaccountName)),LTRIM(RTRIM(SubAccountCode)),'')

【讨论】:

  • 非常感谢您的回答。它对我有用,可以检查我的以下答案是否正确。从 #temp 更新 #temp set SubAccountName=Ltrim(Rtrim(Substring(Subaccountname,8,20)))
  • 更新#temp set SubAccountName=Ltrim(Rtrim(Substring(Subaccountname,8,20))) -- 不需要来自关键字
  • @AjayKumar 请注意,如果答案对您有用,请将其标记,以便其他读者可以了解适用于此特定场景的方法。
  • 这个答案部分正确。当 subaccountname 列中的 subccountcode 匹配但 subaccountname 系列不同时,它工作正常,例如“IMP178”且 subaccountname 为“KGW0076 VINEET KUMAR”。此查询未正确更新值。
猜你喜欢
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
相关资源
最近更新 更多