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

Sql 删除指定字符格式后的字符,sql,sql-server,numbers,character,field,Sql,Sql Server,Numbers,Character,Field,我有一个字段,应该包含6位数字、一个句点和六位数字。我使用的应用程序允许这是自由形式的条目。因为用户就是用户,他们想做什么就做什么,所以我有几个字段,后面有破折号和一些字母(###########-XYZ) 使用T-SQL如何识别并随后删除-XYZ,以便返回数据的完整性。该列是NVARCHAR(36)PK,不允许空值。有问题的列确实有一个唯一的columnID字段。如果需要的部分是前13个字符,请使用left(): 您可以检查前13个字符是否符合预期: select (case when fie

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


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

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

您可以检查前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)

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

您可以检查前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)
由于它是一种自由形式且“用户就是用户”,请使用
charindex
查找1)是否存在
-
,以及2)删除它

例如:

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

你试过什么?你在哪里卡住了?SQL Server有一系列功能可以提供帮助。什么都没有,因为我不知道从哪里开始。您可以从使用类似问题进行研究并查看可用的功能开始。您尝试了什么?你在哪里卡住了?SQL Server有一系列功能可以提供帮助。没有什么,因为我不知道从哪里开始。您可以使用类似的问题进行一些研究,并查看可用的功能。因此,数据更新看起来是直接的,类似于:update testtable set testcolumn=select SUBSTRING(testcolumn,1,coalesce(nullif(CHARINDEX('-',testcolumn,1),0),len(@test)+1)-1),其中testcolumntype=2So然后数据的更新看起来是直接的,类似于:updatetesttable set testcolumn=select SUBSTRING(testcolumn,1,coalesce(nullif(CHARINDEX('-',testcolumn,1),0),len(@test)+1)-1)其中testcolumntype=2这对识别提交审核的不正确记录非常有帮助。@RonaldCarrell…您不接受此答案有什么原因吗?@GordonLinoff如果用户尊重格式,您的解决方案是可以的,但因为Ronald声明“用户就是用户”,这意味着它不一定是13个字符长。例如,一个用户可以写1234.1234,另一个用户可以写01234.12340。@MLeblanc…问题明确指出:“我有一个字段,应该包含6位数字、一个句点和6位数字(###########)。这对识别提交审查的不正确记录非常有帮助。@Ronald Carrell…您不接受此答案有什么原因吗?@GordonLinoff如果用户尊重格式,您的解决方案是可以的,但因为Ronald声明“用户就是用户”,这意味着它不一定是13个字符长。例如,一个用户可以写1234.1234,另一个用户可以写01234.12340。@MLeblanc…问题明确指出:“我有一个字段,应该包含6位数字、一个句点和6位数字。”。