我有一个SQL查询,带回两列数据的两个类型文本。SQL子字符串 - 删除最后一个字符
什么,我试图做的是:
UPDATE [DBNAME}
SET [3 15] = SUBSTR([3 15], -1))
where [3 15] LIKE '%;'
其中[3 15]是列名,我想拉离该列具有在两端的数据“;”然后删除尾部';'
如果列类型是字符串但它不是字符串,这很容易。
运行上:微软SQL Server 2005中 - 开发版
我有一个SQL查询,带回两列数据的两个类型文本。SQL子字符串 - 删除最后一个字符
什么,我试图做的是:
UPDATE [DBNAME}
SET [3 15] = SUBSTR([3 15], -1))
where [3 15] LIKE '%;'
其中[3 15]是列名,我想拉离该列具有在两端的数据“;”然后删除尾部';'
如果列类型是字符串但它不是字符串,这很容易。
运行上:微软SQL Server 2005中 - 开发版
我会改变该文本字段为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, ';;;;', ';'), ';;;', ';'), ';;;', ';'), ';;', ';')
希望这个SQL将帮助您
SELECT LEFT('CHAMLY', LENGTH('CHAMLY') -1);
进一步阅读 使用http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
试试这个:
UPDATE table
SET someColumn = SUBSTRING(someColumn, 1, DATALENGTH(someColumn) - 1)
WHERE someColumn like '%;'
在你的例子中,你说UPDATE dbname
- 我认为这是一个表的名称,出于某种原因,因为如果这是数据库的名称,那就是不正确的。
它是什么类型? – mirkobrankovic
它是文本类型的列。 – LmC
这是哪个数据库和版本? –