如何删除表中特定列的前几个字符?

时间:2009-06-11 18:28:24

标签: sql sql-server string tsql

在SQL中,如何删除表中特定列的前4个字符?列名为Student Code,示例值为ABCD123Stu1231。 我想从我的表中删除所有记录的前4个字符

请指导我

12 个答案:

答案 0 :(得分:214)

SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn

编辑: 为了解释,RIGHT需要2个参数 - 要操作的字符串(或列),以及要返回的字符数(从字符串的“右”侧开始)。 LEN返回列数据的长度,我们减去4,这样我们的RIGHT函数就会将最左边的4个字符留在“后面”。

希望这是有道理的。

再次编辑 - 我刚读了Andrew的回复,他很可能正确地进行了交互,我可能会弄错。如果是这种情况(并且您希望更新表而不是仅返回已修改的结果),则可以执行以下操作:

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)

他是在正确的轨道上,但他的解决方案将保留字符串开头的4个字符,而不是丢弃所说的4个字符。

答案 1 :(得分:75)

Stuff(someColumn, 1, 4, '')

这说明,从第一个1字符位置开始,将4个字符替换为''

答案 2 :(得分:28)

为什么使用LEN所以你有2个字符串函数?你需要的就是角色5 ...

...SUBSTRING (Code1, 5, 8000)...

答案 3 :(得分:12)

试试这个:

update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);

答案 4 :(得分:6)

这是一个简单的模拟你想要做的事情:)

CREATE TABLE Codes
(
code1 varchar(10),
code2 varchar(10)
)

INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','')


UPDATE Codes
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4)

因此,对要修剪的字段使用最后一个语句:)

SUBSTRING功能从第五个字符开始减少Code1,并继续CODE1的长度减去4(开始时跳过的字符数)。

答案 5 :(得分:3)

完整的东西

DECLARE @v varchar(10)

SET @v='#temp'

select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'

答案 6 :(得分:1)

您也可以在SQL中执行此操作..

substring(StudentCode,4,len(StudentCode))

语法

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)

答案 7 :(得分:1)

内置的修剪功能非常适合此目的。

SELECT trim(both 'ag' from 'asdfg');
btrim 
-------
 sdf
(1 riga)

http://www.postgresql.org/docs/8.1/static/functions-string.html

答案 8 :(得分:1)

分享是好的,对于DB2使用: INSERT(someColumn, 1, 4, '')

DB2中不支持

Stuff

答案 9 :(得分:1)

试试这个。 100%工作

UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)

答案 10 :(得分:0)

如果您必须删除前面带有#等特殊字符的前几个字符,那么这是一个很好的字符:

UPDATE tblInvalidID
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ') 

答案 11 :(得分:0)

当字符串的长度小于预期长度时,最上面的答案会有一些令人惊讶的行为,因为将负值传递给RIGHT会修剪第一个字符而不是整个字符串。改用RIGHT(MyColumn, -5)更为合理。

create temp table foo (foo) as values ('123456789'),('12345678'),('1234567'),('123456'),('12345'),('1234'),('123'),('12'),('1'), ('');

select foo, right(foo, length(foo) - 5), right(foo, -5) from foo;

foo       len(foo) - 5  just -5   
--------- ------------  -------     
123456789 6789          6789 
12345678  678           678  
1234567   67            67   
123456    6             6    
12345                       
1234      234               
123       3                 
12                          
1