2

アルファベットの部分の長さが固定されているような文字列prop234がありますが、数値の部分は任意の長さである可能性があります

T-SQL(SQL Server 2008の場合)の文字列から数値部分を取得する必要があります

関数で試しましSUBSTRINGたが、数値部分の長さがわからないため、3番目のパラメーター(長さ)を指定できません

SUBSTRING ( expression ,start , length )

開始インデックスは知っていますが、長さは何でもかまいません

1つの解決策は

SELECT substring([ColumnName], 5, LEN(ColumnName) - 4)

開始インデックスが固定されているため、つまりアルファベット部分の長さが4(固定)

これに対するより良い解決策はありますか?アルファベット部分の長さが一定でない場合はどうなりますか?

4

5 に答える 5

3
select stuff('prop234', 1,4,'')

長さが一定でない場合:

declare @t table(expression varchar(100))
insert @t values('propprop234')

select stuff(expression, 1, patindex('%_[0-9]%', expression), '') from @t

編集:最初にテキストがない、最後に数字がないなど、不正なデータが確実に処理されるようにするには、少し異なるアプローチを使用します。

select stuff(expression, 1,patindex('%[^0-9][0-9]%', expression + '0'), '') 
from @t 
于 2012-06-21T08:26:40.873 に答える
1

これは、アルファベットの部分の長さや長さに関係なく、番号を取得する必要があります。

declare @str as varchar(50)
declare @pos as integer

set @str = 'abdfgdfghhcd123456784564690'
set @pos =  PATINDEX('%[0-9]%',@str)

select substring(@str, @pos,len(@str)-@pos+1)
于 2012-06-21T07:49:17.973 に答える
1

文字列の残りの長さを計算する必要はありません。以下は問題なく動作します。

SELECT substring([ColumnName], PATINDEX('%0-9%',[ColumnName]),8000) 
于 2012-06-25T05:18:37.347 に答える
0

ユーザー定義関数(UDF)を使用して、数値や特殊文字などを含む文字列からアルファベットのみを取得できます。

IF object_id('dbo.GetAlpha') is not NULL
   DROP FUNCTION GetAlpha
GO

CREATE FUNCTION GetAlpha (@strAlpha VARCHAR(256)) 
RETURNS VARCHAR(256)
AS

BEGIN
DECLARE  @intAlpha INT
SET      @intAlpha = PATINDEX('%[^a-z]%', @strAlpha)

BEGIN
WHILE    @intAlpha > 0
BEGIN
SET @strAlpha = STUFF(@strAlpha, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^a-z]%', @strAlpha)
END
END
RETURN ISNULL(@strAlpha,0)
END
GO

関数の使い方の例

select dbo.getalpha('stackoverflow102020');

-------------
stackoverflow
于 2012-06-21T06:38:21.593 に答える
0

「プレフィックス」が常に4文字の場合、次のように記述できます。

declare @v varchar(max) = 'prop234'

select substring(@v, 5, DATALENGTH(@v))

select @v = 'prop567890'

select substring(@v, 5, DATALENGTH(@v))
于 2012-06-21T06:42:09.777 に答える