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

请指引我


当前回答

Stuff(someColumn, 1, 4, '')

这就是说,从第一个字符位置开始,用空替换4个字符”

其他回答

如果你必须删除前面的几个特殊字符,比如#,这是一个很好的例子:

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

这就是说,从第一个字符位置开始,用空替换4个字符”

你也可以在SQL中这样做。

substring(StudentCode,4,len(StudentCode))

语法

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

当值的长度小于4时,顶部答案不合适。

在t - sql

您将得到“无效长度参数传递给正确的函数”,因为它不接受负号。使用CASE语句:

SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;

在波斯格雷斯

小于4的值会出现以下令人惊讶的行为,而不是错误,因为将负值传递给RIGHT会修饰第一个字符,而不是整个字符串。使用RIGHT(MyColumn, -5)会更有意义。

一个比较你使用顶部答案的“长度-5”而不是“-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                           

为什么使用LEN,这样就有了两个字符串函数?你只需要在…

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