如果我具有以下nvarchar变量-BTA200,如何从中仅提取BTA?
另外,如果我有不同的长度(例如BTA50,BTA030),如何仅提取数字部分?
最佳答案
我建议结合使用PatIndex和Left。经过精心构建,无论数据看起来如何,您都可以编写始终有效的查询。
例如:
Declare @Temp Table(Data VarChar(20))
Insert Into @Temp Values('BTA200')
Insert Into @Temp Values('BTA50')
Insert Into @Temp Values('BTA030')
Insert Into @Temp Values('BTA')
Insert Into @Temp Values('123')
Insert Into @Temp Values('X999')
Select Data, Left(Data, PatIndex('%[0-9]%', Data + '1') - 1)
From @Temp
PatIndex将查找第一个字符,其范围在0-9之间,并返回它的字符位置,您可以将其与LEFT函数一起使用以提取正确的数据。请注意,PatIndex实际上使用的是Data +'1'。这样可以保护我们免受找不到数字的数据的侵害。如果没有数字,PatIndex将返回0。在这种情况下,由于我们使用的是Left(Data,PatIndex-1),因此LEFT函数将出错。当PatIndex返回0时,我们将以Left(Data,-1)结尾,这将返回错误。
仍然有一些方法可能会失败。有关完整的解释,我鼓励您阅读:
Extracting numbers with SQL Server
那篇文章展示了如何从字符串中获取数字。在您的情况下,您想获取字母字符。但是,该过程非常相似,您可能可以从中学到一些有用的东西。
关于sql-server - 如何在T-SQL中提取字符串的一部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/375133/