以指定的字符格式删除字符

问题描述

我有一个字段,该字段应包含6位数字,一个句点和6位数字(######。######)。我使用的应用程序允许此输入为自由格式。因为用户用户,他们会按照自己的意愿去做,所以我有几个字段,后面带有破折号和一些字母(############-XYZ)。

如何使用T-sql识别并随后删除-XYZ,以便可以返回数据的完整性。该列是NVARCHAR(36),PK,并且不允许空值。该列确实具有唯一的columnID字段。

解决方法

如果所需部分是前13个字符,请使用left()

select left(field,13)

您可以检查前13个字符是否符合您的期望:

select (case when field like '[0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]%'
             then left(field,13)
             else -- whatever you want when the field is bad
        end)
,

由于它是自由格式,并且“用户就是用户”,请使用charindex来确定1)是否有-和2)将其删除。

示例:

DECLARE @test NVARCHAR(36) = N'######.######-XYZ'
SELECT SUBSTRING(@test,1,COALESCE(NULLIF(CHARINDEX('-',@test,1),0),LEN(@test)+1)-1)