删除 SQL Server 2008 R2 中测试的最后三个字符

Delete last three characters of test in SQL Server 2008 R2

我正在尝试删除邮政编码的最后三个字符,但问题是邮政编码可能是 eneter 字段类型 varchar(max) 不知道我怎么不能删除最后一个字符在文本值中。

目前,当我尝试运行代码时,出现以下错误

Invalid length parameter passed to the LEFT or SUBSTRING function

代码:

SELECT
      c.[postcode],
      left ( ltrim(rTrim(c.[postcode])) ,len(ltrim(rTrim(c.[postcode])))-4) as ode
FROM [testing].[dbo].[canidateinfo] as c

这样的事情会成功吗:

SELECT  LEFT(PostCode, CHARINDEX(' ', Postcode)+1) PostCodeSector
FROM testing.dbo.canidateinfo

** 更新 **

CREATE TABLE #postcodeTest (postcode varchar(max))
insert into #postcodeTest
Values
('AB3 4FY'),
('AB34FY'),
('M504FY'),
('M50 4FY')

SELECT  DISTINCT
        CASE (isnumeric(SUBSTRING([Postcode] , 2 , 1))) 
            WHEN 1 THEN LEFT ([Postcode] , 2) 
            ELSE LEFT ([Postcode] , 3) 
        END PcodeArea
FROM    #postcodeTest

这将排除最后 3 个字符:

SELECT
      c.[postcode],
      ltrim(substring( c.postcode , -2, len(c.postcode))) code
FROM [testing].[dbo].[canidateinfo] as c

示例:

DECLARE @t table(postcode varchar(20))
INSERT @t values('1234567'),('32'),('abcde'),(' aa123'),('  aa  ')

SELECT 
  postcode, 
  ltrim(substring( postcode , -2, len(postcode))) as code
FROM @t

结果:

postcode  code
1234567   1234
32        <blank>
abcde     ab
 aa123    aa
  aa      <blank>

如果您传递的变量为 null 或小于 3(因为您在查询中指定了 -3),那么它会在您得到时抛出错误

select a.[postcode],
      iif(len(a.[postcode])<3,a.[postcode],left(a.[postcode],len(lTrim(a.[postcode]))-3) as trimmed
FROM [testing].[dbo].[canidateinfo] as a

我使用了 iif(exp,true,false) 函数,它会检查长度并根据它工作...