次の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)になります。
これが失敗する方法はまだあります。完全な説明については、以下を読むことをお勧めします。
その記事は、文字列から数字を取得する方法を示しています。あなたの場合、代わりにアルファ文字を取得します。ただし、このプロセスは非常によく似ているので、そこから何か有用なことを学ぶことができます。
substring(field、1,3)はあなたの例で動作します。
select substring(field, 1,3) from table
また、アルファベット部分が可変長の場合、これを実行してアルファベット部分を抽出できます。
select substring(field, 1, PATINDEX('%[1234567890]%', field) -1)
from table
where PATINDEX('%[1234567890]%', field) > 0
LEFT( 'BTA200'、3)は、次のように、指定した例で機能します。
SELECT LEFT(MyField, 3)
FROM MyTable
数値部分を抽出するには、このコードを使用できます
SELECT RIGHT(MyField, LEN(MyField) - 3)
FROM MyTable
WHERE MyField LIKE 'BTA%'
--Only have this test if your data does not always start with BTA.
declare @data as varchar(50)
set @data='ciao335'
--get text
Select Left(@Data, PatIndex('%[0-9]%', @Data + '1') - 1) ---->>ciao
--get numeric
Select right(@Data, len(@data) - (PatIndex('%[0-9]%', @Data )-1) ) ---->>335