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

Shy*_*yju 143 sql t-sql sql-server string

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

请指导我

Aar*_*ton 232

SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Run Code Online (Sandbox Code Playgroud)

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

希望这是有道理的.

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

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Run Code Online (Sandbox Code Playgroud)

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

  • 对于<4个字符的值,这将失败.您应该添加一个case块来返回<4的列值. (8认同)
  • 可能最好的处理方式就是:UPDATE MyTableSET MyColumn = RIGHT(MyColumn,LEN(MyColumn) - 4)WHERE LEN(MyColumn)> 4 SUBSTRING不会出错,但它也会不必要地"更新"行少于四个字符.也就是说,OP表示他们想要修剪特定列的前4个字符 - 我会假设除非提供更详细的所有行需要修剪. (2认同)

Aar*_*nLS 77

Stuff(someColumn, 1, 4, '')
Run Code Online (Sandbox Code Playgroud)

这说,从第一个1字符位置开始,4用任何东西替换字符''

  • 老问题我知道,但我更喜欢这个解决方案,因为它不使用超过1个函数或者有一些随机大数字. (6认同)
  • 甚至更多:如果`someColumn`是一个复杂的东西,比如来自CTE或某些东西的子选择,这不需要对它进行两次评估. (2认同)

gbn*_*gbn 29

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

...SUBSTRING (Code1, 5, 8000)...
Run Code Online (Sandbox Code Playgroud)

  • varchar(max) 已经大于 8000 个字符。如果你放 len(column) 它会永远工作 (3认同)
  • 或者就用2000000000。为什么要加一个LEN功能。不添加任何值并忽略尾随空格(如果需要) (2认同)
  • @ user2366842 使用已接受的答案会切断其他字符的可能原因是您的文本中可能有尾随空格。如果需要,您可以使用 RTRIM 和 LTRIM 进行补偿。 (2认同)

And*_*are 12

试试这个:

update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Run Code Online (Sandbox Code Playgroud)


Nou*_*non 8

当值的长度可能小于 4 时,最上面的答案不合适。

在 T-SQL 中

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

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

在 Postgres 中

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

比较使用最上面答案的“length - 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                           
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 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)
Run Code Online (Sandbox Code Playgroud)

所以,对你要修剪的字段使用最后一个语句:)

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


Hig*_*ian 5

完整的东西

DECLARE @v varchar(10)

SET @v='#temp'

select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'
Run Code Online (Sandbox Code Playgroud)


Dur*_*dey 5

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

substring(StudentCode,4,len(StudentCode))
Run Code Online (Sandbox Code Playgroud)

句法

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个。100% 工作

UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)
Run Code Online (Sandbox Code Playgroud)