删除 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) 函数,它会检查长度并根据它工作...
我正在尝试删除邮政编码的最后三个字符,但问题是邮政编码可能是 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) 函数,它会检查长度并根据它工作...