2

私のデータベース(SQL 2005)にはコメントを保持するフィールドがありますが、コメントにはIDがあり、IDだけを取り除き、可能な場合はそれをintに変換したいと思います:

activation successful of id 1010101

上記の行は、db フィールドのデータの正確な構造です。

いいえ、アプリケーションのコードでこれを実行したくありません。念のため、実際には触れたくありません ;-)

4

7 に答える 7

1

これでうまくいくはずです:

SELECT SUBSTRING(column, PATINDEX('%[0-9]%', column), 999)
FROM table

サンプル データに基づいて、文字列内に整数が 1 つだけ出現し、それが末尾にあることがわかります。

于 2008-09-19T15:18:04.693 に答える
0
CAST(REVERSE(LEFT(REVERSE(@Test),CHARINDEX(' ',REVERSE(@Test))-1)) AS INTEGER)
于 2008-09-19T15:25:35.160 に答える
0
select cast(right(column_name,charindex(' ',reverse(column_name))) as int)
于 2008-09-19T15:27:09.757 に答える
0

コメント文字列がまさにそのようなものである場合は、置換を使用できます。

select   replace(comment_col, 'activation successful of id ', '') as id from ....

ただし、ほぼ確実にそうではありません。失敗したアクティベーションについてはどうでしょうか。ネストされたreplaceステートメントになる可能性があります

select   replace(replace(comment_col, 'activation not successful of id ', ''), 'activation successful of id ', '') as id from ....

[申し訳ありませんが、この編集画面からは、それが完全に有効な SQL かどうかわかりません]

それは面倒になり始めます。関数を作成し、その中に replace ステートメントを入れることを検討してください。

これが1回限りの作業であれば、それほど重要ではありません。正規表現を使用することもできますが、それは非常に遅いです (いずれにせよ、2 つの問題があることを意味します)。

于 2008-09-19T15:19:59.230 に答える
0
-- Test table, you will probably use some query  
DECLARE @testTable TABLE(comment VARCHAR(255))  
INSERT INTO @testTable(comment)  
    VALUES ('activation successful of id 1010101')

-- Use Charindex to find "id " then isolate the numeric part  
-- Finally check to make sure the number is numeric before converting  
SELECT CASE WHEN ISNUMERIC(JUSTNUMBER)=1 THEN CAST(JUSTNUMBER AS INTEGER) ELSE -1 END  
FROM (  
       select right(comment, len(comment) - charindex('id ', comment)-2) as justnumber  
       from @testtable) TT

また、このアプローチはよりセットベースであるため、一連のデータ値に対してより効率的であることも付け加えておきます。しかし、変数として 1 つの値に対してのみ行うのは非常に簡単です。列のコメントを使用する代わりに、のような変数を使用できます@chvComment

于 2008-09-19T15:15:42.920 に答える
0

現時点ではテストする手段はありませんが、次のとおりです。

select convert(int, substring(fieldName, len('activation successful of id '), len(fieldName) - len('activation successful of id '))) from tableName
于 2008-09-19T15:15:47.040 に答える
0

少しコードを書いていただけませんか?1 つのオプションとして、CLR ユーザー定義関数を作成し、正規表現を使用します。詳細については、こちらをご覧ください。これにより、複雑な文字列が処理されます。

上記の行が常に「id ####### の有効化に成功しました」という形式で、フィールドの末尾に数字が続く場合:

declare @myColumn varchar(100)
set @myColumn = 'activation successful of id 1010102'


SELECT
    @myColumn as [OriginalColumn]
,   CONVERT(int, REVERSE(LEFT(REVERSE(@myColumn), CHARINDEX(' ', REVERSE(@myColumn))))) as [DesiredColumn]

あなたに与えます:

OriginalColumn                           DesiredColumn
---------------------------------------- -------------
activation successful of id 1010102      1010102

(1 row(s) affected)
于 2008-09-19T15:21:21.440 に答える