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

Removing characters after a specified character format

我有一个字段应包含 6 位数字、一个句点和六个数字 (######.######)。我使用的应用程序允许这是自由形式的条目。因为用户就是用户,他们会做他们想做的事,所以我有几个字段,后面有一个破折号和一些字母 (######.######-XYZ)。

使用 T-SQL 我如何识别并随后删除 -XYZ 以便我可以 return 数据的完整性。该列是 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)

因为它是 free-form 并且“用户是用户”,使用 charindex 来确定 1) 是否存在 - 和 2) 将其删除。

示例:

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