整数を含むサードパーティのツールから文字列を取り、intを取り除き、それを使ってローカルテーブルに結合する必要があります。私はI worked on ticket no. 123456 for a long time
のためにうまくいくPinal Dave's udf_GetNumeric functionを使用していますが、ユーザは5/9/2016 ticket 123456 was closed as duplicate
のようなものを入力しています。これは5092016123456
です。 ID列が> 9999ですが、SQLが([0-9]{5,})
を理解できないため、検索パターンを変更して5つ以上の連続する数字のみを表示できます。私は残念ながら、完全正規表現を使用するCLRをインストールすることはできません。SQLで日付を含む可能性のある文字列からintを取得するにはどうすればよいですか?
答えて
私たちのID列が> 9999であるので、わずか5つの以上 連続した数字を見て、私は検索パターンを変更することができますが、SQLは理解してい ん([0-9] {5、})。私はCLRをインストールできません
%[0-9][0-9][0-9][0-9][0-9]%
を使用するように検索パターンを変更できます。それは5つの連続する整数の文字列を見つけるでしょう。例えば以下のように。
WITH T(Notes)
AS (SELECT 'I worked on ticket no 123456. for a long time ')
SELECT *,
SUBSTRING(Notes, PatIdx, Length)
FROM T
CROSS APPLY (SELECT PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', Notes)) CA(PatIdx)
CROSS APPLY (SELECT PATINDEX('%[^0-9]%', SUBSTRING(Notes + ' ', PatIdx, 8000)) - 1) CA2(Length)
ありがとう、マーティン。これは今はうまくいくが、123456はID列であり、最終的には5,6個以上の数字を持つだろうが、それは将来的には十分に長いので、おそらくそれを心配する必要はないだろう。 –
6つの連続した数字がある場合、5を見つけるパターンは6になります。しかし、開始点を見つけたら、その点から最初の非整数を見つけるべきでしょう。編集します。 –
ありがとう!これはあまりにも機能し、私の答えよりも余りに少ないです。 –
JamesZの提案を使用してスペースを分割して、私は別の場所で使用していた古い機能を再利用しました。
CREATE FUNCTION [dbo].[tvf_CreateVarcharTableFromCsv]
(
@VarcharCsv VARCHAR(4000) ,
@Seperator VARCHAR(5) = NULL
)
RETURNS @VarcharTable TABLE
(
VarcharIndex VARCHAR(50) NOT NULL
)
AS
BEGIN
DECLARE @localVarcharIndexList VARCHAR(4000);
DECLARE @localSeperator VARCHAR(5);
SET @localVarcharIndexList = @VarcharCsv;
SET @localSeperator = @Seperator;
IF @localSeperator IS NULL
SET @localSeperator = ',';
/*****************************************************************************************
Parse CSVs into tables with CTE
http://www.simple-talk.com/sql/t-sql-programming/sql-server-2005-common-table-expressions/
*****************************************************************************************/
IF @localVarcharIndexList IS NOT NULL
BEGIN
WITH VarcharCsv (i, j, VarcharIndex)
AS (SELECT i = 1 ,
VarcharIndex = CHARINDEX(@localSeperator,
@localVarcharIndexList
+ @localSeperator) ,
SUBSTRING(@localVarcharIndexList, 1,
CHARINDEX(@localSeperator,
@localVarcharIndexList
+ @localSeperator)
- 1)
UNION ALL
SELECT i = j + 1 ,
j = CHARINDEX(@localSeperator,
@localVarcharIndexList
+ @localSeperator, j + 1) ,
SUBSTRING(@localVarcharIndexList,
j + 1,
CHARINDEX(@localSeperator,
@localVarcharIndexList
+ @localSeperator,
j + 1) - (j + 1))
FROM VarcharCsv
WHERE CHARINDEX(@localSeperator,
@localVarcharIndexList
+ @localSeperator, j + 1) <> 0
)
INSERT INTO @VarcharTable
SELECT VarcharIndex
FROM VarcharCsv
OPTION (MAXRECURSION 500);
END;
RETURN;
END;
そして、それは私の要件については、次のように使用することができます:
SELECT *
FROM [tvf_CreateVarcharTableFromCsv]('here is a string 123456 blah blah blah 5/09/2016"',
' ')
WHERE LEN(VarcharIndex) > 5
AND ISNUMERIC(VarcharIndex) = 1
- 1. 文字列の最後からintを取得する方法intにint型の文字列が含まれている可能性があります。
- 2. 他の文字を含む文字列からintを取得するには?
- 3. 文字列を含む配列のインデックスを取得するにはどうすればよいですか?
- 4. Cの文字配列から文字列を取得するにはどうすればよいですか?
- 5. 文字エスケープシーケンスを含む文字列をcharに変換するにはどうすればよいですか?
- 6. PHP:配列に文字列を含む文字列があるかどうかを調べるにはどうすればよいですか?
- 7. 文字列を含むエクステンションから番号を削除するにはどうすればよいですか?
- 8. htmlタグを含む文字列から画像をレンダリングするにはどうすればよいですか?
- 9. リストから値を含む文字列をフォーマットするにはどうすればよいですか?
- 10. 日付である文字列を解析するにはどうすればよいですか?
- 11. (OCaml)文字列から文字を取得するにはどうすればよいですか?
- 12. C#現在の文字列である日付が今日であるかどうかを確認するにはどうすればよいですか?
- 13. 日付文字列の日付を変更するにはどうすればよいですか?
- 14. Matlabで日付を含む文字列の日付書式を変更するにはどうすればよいですか?
- 15. 文字列とintのユーザー入力を取得するにはどうすればよいですか?
- 16. アラビア文字を含む文字列を検索するにはどうすればよいですか?
- 17. u '文字を含むJSON文字列を解析するにはどうすればよいですか?
- 18. #文字を含む文字列を解析するにはどうすればよいですか?
- 19. Pythonで日付文字列の日をチェックするにはどうすればよいですか?
- 20. 日付の範囲から日時のリストを取得するにはどうすればよいですか?
- 21. ヒンディー文字を含む文字列の文字のUnicode 10進表現を取得するにはどうすればよいですか?
- 22. PHPの日付間隔から日数を取得するにはどうすればよいですか?
- 23. 通知バンドルから文字列配列を取得するにはどうすればよいですか?
- 24. fullcalendarで日付オブジェクトにイベントの日付を取得するにはどうすればよいですか?
- 25. PHPで文字列を日付に変換するにはどうすればよいですか? C#ので
- 26. スラッシュ文字を含む文字列パスパラメータを渡すにはどうすればよいですか?
- 27. アルファベットに別の文字を含む文字を追加するにはどうすればよいですか?
- 28. 各文字列の間に特定の数のスペースを含む文字列を含むリストを印刷するにはどうすればよいですか?
- 29. ファイルからXML文字列を文字列に読み込むにはどうすればよいですか?
- 30. Silverlightでオーバーレイを含むボタンからClickEventを取得するにはどうすればよいですか?
はあなたがすべての数字をテキストからスペースで区切られていることを前提とすることはできますか?スペースからのテキストを別々の行に分割し、数字だけを含む行を取る場合は? –
あなたの質問は明確ではありません。いくつかのデータと希望の出力を見せてください。あなたが適用したいロジックは何ですか?なぜあなたはSQLがundestand regexpresionを意味しないのですか? [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を向上させ、より良い回答を得る方法を学ぼう。 –
申し訳ありません。基本的には、私はここに "123456の文字列があります.2011年5月9日" 123456を取得したいと思います。 Sqlは正規表現を理解していますが、それは限られたサブセットです。 –