删除指定字符格式后的字符
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)
我有一个字段应包含 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)