2013-07-29 113 views
2

我有一个SQL查询,带回两列数据的两个类型文本。SQL子字符串 - 删除最后一个字符

什么,我试图做的是:

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

其中[3 15]是列名,我想拉离该列具有在两端的数据“;”然后删除尾部';'

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

运行上:微软SQL Server 2005中 - 开发版

+0

它是什么类型? – mirkobrankovic

+0

它是文本类型的列。 – LmC

+0

这是哪个数据库和版本? –

回答

2

我会改变该文本字段为varchar (最大)尽快。但这里要说的是应该工作的解决方案:

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, ';;;;', ';'), ';;;', ';'), ';;;', ';'), ';;', ';') 
+0

伟大的答案一个快速quesiton 如何可能会有一些简单的id ;;;在字符串内如何删除它并用一个替换它; – LmC

+0

非常感谢,我虽然编辑了这个问题来反映这个,但编辑没有通过 – LmC

+0

嗨,很好的答案,但一旦我再次通过;;我的小鹰;我的例如利亚姆;;大卫 所以我想做一个替换看起来像利亚姆;大卫 – LmC

4

希望这个SQL将帮助您

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

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

+0

代表什么? – LmC

+0

消息195,级别15,状态10,行1 “长度”不是公认的内置函数名称。 – LmC

+0

您必须替换'CHAMLY'的colomn名称。我使用这个SQL来显示它如何在MySQL中工作。您必须根据您的要求进行修改。我试图解释如何可以从问题而不是正确的SQL来。使用LEN长度。使用此 UPDATE [DBNAME} SET [3 15] = LEFT([3,15],LEN([3 15])-1); 其中[3 15] LIKE'%;' –

3

试试这个:

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

在你的例子中,你说UPDATE dbname - 我认为这是一个表的名称,出于某种原因,因为如果这是数据库的名称,那就是不正确的。

+0

我将如何做替换?像这样:REPLACE((cast [3 15] as VARCHAR(MAX)),';;',';') 这似乎不适用于我:( – LmC

+0

您的语法是有点关闭,使用此:REPLACE (CAST([3 15] as VARCHAR(MAX)),';;',';') – JoeFryer

0

一个简单的

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

这是行不通的。 – sobolevn

相关问题