【问题标题】:Update statement to update part of column length更新语句以更新部分列长度
【发布时间】:2016-01-20 02:26:34
【问题描述】:

我正在使用 SQL Server 2008。假设以下列为例。

column1

cjd.001 306.1   
cjd.001 306.2   
cjd.001 306.R    

现在我想替换所有的 '.'和 '-'。但只是从第一个字符串开始,即在空格之前或 8 个字符以下。其余字段应保持不变。

SampleOutput

cjd-001 306.1   
cjd-001 306.2   
cjd-001 306.R  

我尝试了以下查询,但它替换了所有“。”。

UPDATE dbo.table
SET column1 = REPLACE(column1, '.', '-')

我想知道我可以在 where 子句中使用什么? 尝试使用子字符串函数,但没有成功。

【问题讨论】:

  • 显然你必须将你的字符串分成两部分并且只改变第一部分。因此,首先尝试找到拆分字符串的位置。然后相应地使用 SUBSTRING,然后 REPLACE,然后再次将两个部分粘合在一起。
  • 在您最终替换的第四个位置是否总是一个字符?和你的示例数据一样?
  • 第 1 位是否可以出现空格,如果出现,是否应该完全阻止替换,或者是否应该忽略甚至删除?
  • 没有马丁'。'可能发生在任何地方。但我只想替换第一个空格之前发生的那些
  • 第一个位置 Throsten 不会出现空格。您能帮我解决拆分字符串的查询示例吗?

标签: sql sql-server sql-server-2008 sql-update substring


【解决方案1】:

我认为你需要这样的 SQL:

UPDATE yourTable
SET column1 = REPLACE(SUBSTRING(column1, 1, CHARINDEX(' ', column1)), '.', '-')
            + SUBSTRING(column1, CHARINDEX(' ', column1) + 1, LEN(column1));

[SQL Fiddle Demo]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多