【问题标题】:SQL Substring - Remove Last Character(s)SQL 子字符串 - 删除最后一个字符
【发布时间】:2013-07-29 02:32:55
【问题描述】:

我有一个 SQL 查询,它返回 2 列数据,都是 TYPE TEXT。

我想做的是:

UPDATE [DBNAME}
SET [3 15] = SUBSTR([3 15], -1))
where [3 15] LIKE  '%;'

其中 [3 15] 是列名,我想从以 ';' 结尾的列中提取数据然后删除尾随的';'

如果列类型是字符串而不是字符串,这将很容易。

运行于:Microsoft SQL Server 2005 - 开发版

【问题讨论】:

  • 它是文本类型的列。
  • 这是哪个数据库和版本?
  • Microsoft SQL Server 2005 - 开发人员版

标签: sql sql-server-2005 text sql-update substr


【解决方案1】:

希望这个sql对你有帮助

SELECT LEFT('CHAMLY', LENGTH('CHAMLY') -1);

供进一步阅读 使用http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

【讨论】:

  • "CHAMLY" 代表什么?
  • Msg 195, Level 15, State 10, Line 1 'LENGTH' 不是可识别的内置函数名称。
  • 您必须替换“CHAMLY”的列名。我使用这个 sql 来展示它在 mysql 中是如何工作的。您必须根据您的要求进行修改。我试图解释如何解决问题而不是正确的 sql。使用 LEN 作为长度。使用这个 UPDATE [DBNAME} SET [3 15] = LEFT([3,15], LEN([3 15]) -1);其中 [3 15] LIKE '%;'
【解决方案2】:

试试这个:

UPDATE table
SET someColumn = SUBSTRING(someColumn, 1, DATALENGTH(someColumn) - 1)
WHERE someColumn like '%;'

在您的示例中,您说UPDATE dbname - 我假设这是一个表的名称,出于某种原因,因为如果这是数据库的名称,那么这是不正确的。

【讨论】:

  • 我将如何进行替换?像这样:REPLACE((cast [3 15] as VARCHAR(MAX)),';;',';') 这似乎对我不起作用:(
  • 你的语法有点不对,使用这个:REPLACE(CAST([3 15] as VARCHAR(MAX)), ';;', ';')
【解决方案3】:

我会尽快将该文本字段更改为 varchar(max)。但是,这是一个应该可行的解决方案:

declare @a table([3 15] text)
insert @a values('aba;;;')
insert @a values('123abc;;')
insert @a values('abdc;')
insert @a values('abkjfshc')
insert @a values(';;;;')

;with a as
(
SELECT [3 15], cast([3 15] as varchar(max)) v 
-- replace @a with your actual tablename
FROM @a
)
UPDATE a
SET [3 15] = left(v, len(v)-patindex('%;[^;]%', reverse(v) + '+') + 1)
WHERE [3 15] LIKE  '%;;' -- notice the change

select * from @a

结果:

3 15
aba;
123abc;
abdc;
abkjfshc
;

编辑:

要替换文本中所有 '%;;%' 的组合:

declare @a table([3 15] text)
insert @a values('aba;;;')
insert @a values('123abc;;')
insert @a values('abdc;')
insert @a values('ab;;kjf;;;;;shc')
insert @a values(';;;;')

-- if any combinations of ';;' still exists repeat until they are gone
while exists (select 1 from @a where [3 15] like '%;;%')
with a as
(
SELECT [3 15], cast([3 15] as varchar(max)) v 
-- replace @a with your actual tablename
FROM @a
WHERE [3 15] LIKE  '%;;%' -- notice the change
)
UPDATE a
-- to speed things up i used several replace
SET [3 15] = replace(replace(replace(replace(v, ';;;;', ';'), ';;;', ';'), ';;;', ';'), ';;', ';')

【讨论】:

  • 很好的回答一个快速的问题 id o 可能有什么简单的东西;;在字符串中我如何删除它并用一个替换它;
  • 非常感谢,我认为我编辑了问题以反映这一点,但编辑没有通过
  • 您好,答案很好,但我又一次失礼了;;我提到了,例如 liam;;david,所以我想做一个看起来像 liam;david 的替换
  • I.e 是这样的:REPLACE((cast [3 15] as VARCHAR(MAX)),';;',';') 但我无法正常工作
  • @LmC 这与您问题中的描述甚至您编写的 where 子句相去甚远。我做了一个编辑来处理它
【解决方案4】:

一个简单的

UPDATE Table SET column = LEFT(column,-1)

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 2010-11-18
    • 2017-08-19
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多