如何通过修剪最后8个字符串返回字符串中的前几个字符?(SQL Server 2008)

eek*_*142 2 sql sql-server string sql-server-2008

我有一堆像这样的字符串:

 'ABCD99991000'
 'XYZ79991000'
 'E2493991039'
Run Code Online (Sandbox Code Playgroud)

我真正关心的是最后8个字符之前的所有内容.问题是我在字符串开头处理的字符长度可变.在上面的例子中,我想要返回的是:

 'ABCD'
 'XYZ'
 'E24'
Run Code Online (Sandbox Code Playgroud)

如果我能让它在结果之前返回所有内容,那么RIGHT()函数将是完美的.例如,RIGHT(E2499991039,8)返回我不想要的数字!如何在查询中的最后8个字符之前返回可变长度强度?

SQL Server 2008

Irf*_*rfy 15

看到 SUBSTRING

select substring(column_name, 1, len(column_name)-8)
from table_name
Run Code Online (Sandbox Code Playgroud)

  • +1 - 我相信这会处理输入字符串的长度小于请求的字符数的情况,而左边则不会:`传递给左侧函数的长度参数无效. (2认同)

Mit*_*eat 5

declare @str varchar(50)

set @str = 'ABCD99991000'

select LEFT(@str, len(@str) - 8)
Run Code Online (Sandbox Code Playgroud)

(没有错误检查Len(@str)<8)

所以,

select LEFT(colname, LEN(colname) - 8) 
from table_name 
Run Code Online (Sandbox Code Playgroud)