根據你的評論,你只是想刪除第一個字符的位置,如果它是阿爾法。這消除了對函數/ 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)以來,已經添加了幾個函數可用於幫助解決此問題。 –