SQL子串 - 删除最后一个字符

时间:2013-07-29 10:30:15

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

我有一个SQL查询,可以返回TYPE TEXT的两列数据。

我想做的是:

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

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

如果列类型是字符串但不是。

,这将很容易

在:Microsoft SQL Server 2005 - Developer Edition上运行

4 个答案:

答案 0 :(得分:4)

希望这个sql能帮到你

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

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

答案 1 :(得分:3)

试试这个:

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

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

答案 2 :(得分:2)

我会尽快将该文本字段更改为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, ';;;;', ';'), ';;;', ';'), ';;;', ';'), ';;', ';')

答案 3 :(得分:0)

一个简单的

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