根据你的评论,你只是想删除第一个字符的位置,如果它是阿尔法。这消除了对函数/ CLR调用的需要。如果这个需求改变了,你将需要创建一个函数来去除字符,但其余的查询将会起作用。
Create Table #Test (PolicyDate Varchar(8000))
Insert #Test Values ('A19990602')
Insert #Test Values ('A1999062')
Insert #Test Values ('20010405')
Select Convert(Date,
Case When IsNumeric(PolicyDate) = 0 Then
Case When Len(PolicyDate) < 9 Then Null
Else Right(PolicyDate, Len(PolicyDate) -1) End
Else PolicyDate
End) PolicyDate2
From #Test
示例功能,有很多可用的方法,哪种方法更快。
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
END
ps。我使用了IsNumeric(),因为这就是你说的你想实现的。但是请注意,通过设计,可以包含certian字符,并且仍然有函数返回它是一个数字。 IsNumeric($1,230.54)
将返回1.如果这是一个问题,则使用替代方法,例如TRY_PARSE(PolicyDate as int)
用于sql2012及更高版本。
我无法写case语句,但这里是我试过.. 选择RIGHT([policy_date],LEN([policy_date]) - 1)AS MyTrimmedColumn 从表 其中isnumeric([policy_date])= 0 – swathi
您正在使用哪个版本的SQL Server?自SQL Server 2012(TRY_PARSE,TRY_CONVERT和TRY_CAST)以来,已经添加了几个函数可用于帮助解决此问题。 –