ストアプロシージャ内のコンマ区切り文字列を文字列に分割してテーブルフィールドに挿入する方法はありますか? WHILEでFirebirdの2.5ストアドプロシージャ内でコンマ区切り文字列を分割する方法は?
答えて
文字列を分割する方法のサンプルを行うと、 wriサブストリングをテーブルに入れてください:
create procedure SPLIT_STRING (
AINPUT varchar(8192))
as
declare variable LASTPOS integer;
declare variable NEXTPOS integer;
declare variable TEMPSTR varchar(8192);
begin
AINPUT = :AINPUT || ',';
LASTPOS = 1;
NEXTPOS = position(',', :AINPUT, LASTPOS);
while (:NEXTPOS > 1) do
begin
TEMPSTR = substring(:AINPUT from :LASTPOS for :NEXTPOS - :LASTPOS);
insert into new_table("VALUE") values(:TEMPSTR);
LASTPOS = :NEXTPOS + 1;
NEXTPOS = position(',', :AINPUT, LASTPOS);
end
suspend;
end
使用 POSITION http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-position.html
と
SUSTRING http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-substring.html
機能を使用して
はここ声明
ようこそを発表しました!これは理論的に質問に答えるかもしれませんが、答えの本質的な部分をここに含め、参照用のリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。ありがとう – codingbadger
変更されたマイケルのバージョンを投稿しています。多分誰かにとって役に立ちます。
変更は、次のとおり
- SPLIT_STRINGは、選択手順です。
- カスタム区切り文字は使用できます。
- 区切り文字がP_STRINGの最初の文字である場合も解析します。
set term^;
create procedure split_string (
p_string varchar(32000),
p_splitter char(1))
returns (
part varchar(32000)
)
as
declare variable lastpos integer;
declare variable nextpos integer;
begin
p_string = :p_string || :p_splitter;
lastpos = 1;
nextpos = position(:p_splitter, :p_string, lastpos);
if (lastpos = nextpos) then
begin
part = substring(:p_string from :lastpos for :nextpos - :lastpos);
suspend;
lastpos = :nextpos + 1;
nextpos = position(:p_splitter, :p_string, lastpos);
end
while (:nextpos > 1) do
begin
part = substring(:p_string from :lastpos for :nextpos - :lastpos);
lastpos = :nextpos + 1;
nextpos = position(:p_splitter, :p_string, lastpos);
suspend;
end
end^
set term ;^
それは32000の原因に私のFirebirdサーバーのVARCHARのサイズ宣言の中で、一つのことを除いて良さそうですので注意してください例外を「実装制限を超過しました」。私の代わりにBLOBのSUB_TYPEのTEXTを:)使用することをお勧め
私が使用して同様のソリューションは、スタックオーバーフローに智異Cincuraによってしばらく前 http://blog.cincura.net/232347-tokenize-string-in-sql-firebird-syntax/
recreate procedure Tokenize(input varchar(1024), token char(1))
returns (result varchar(255))
as
declare newpos int;
declare oldpos int;
begin
oldpos = 1;
newpos = 1;
while (1 = 1) do
begin
newpos = position(token, input, oldpos);
if (newpos > 0) then
begin
result = substring(input from oldpos for newpos - oldpos);
suspend;
oldpos = newpos + 1;
end
else if (oldpos - 1 < char_length(input)) then
begin
result = substring(input from oldpos);
suspend;
break;
end
else
begin
break;
end
end
end
- 1. V-forメソッドでコンマ区切り文字列を分割する
- 2. 区切り文字でテキストボックス内の文字列を分割する方法
- 3. コンマで区切られた文字列をOracleで分割する方法
- 4. 分割文字列区切り文字
- 5. Jenkins Groovyスクリプトでコンマ区切り文字を使用して文字列を分割する方法は?
- 6. 右から区切り文字で文字列を分割する方法は?
- 7. 区切り文字列をNSArrayに分割する方法
- 8. Haskell - 区切り文字で文字列を分割する
- 9. 私自身の区切り文字で文字列を分割する方法
- 10. 分割データフレームの列区切り文字
- 11. SecureInt64値を持つコンマ区切り文字列を分割する方法はありますか?
- 12. Spark Scalaデータフレームでコンマ区切り文字列を分割してn値を取得する方法は?
- 13. コンマ区切り文字列を読む
- 14. Beanshell Preprocessorでコンマ区切り文字列を3つの変数に分割する方法は?
- 15. Mysqlクエリ... WHERE(コンマ区切り文字列)IN(カンマ区切り文字列)
- 16. 文字列C#で区切り文字で分割/ ASP.Net
- 17. 区切り文字なしでC#で文字列を文字列に分割
- 18. カンマ区切りの文字列をコンマ区切りの列で検索する方法mysql
- 19. 文字区切り文字を使用した列の分割
- 20. 文字列配列の文字列を分割して区切り文字を分割する
- 21. データフレーム内の複数文字の区切り文字で分割した列
- 22. コンマで区切られた文字列とコンマで区切られた文字列を照合するSQLクエリ?
- 23. ストアドプロシージャへのカンマ区切り文字列
- 24. 個々の文字列自体にコンマがある場合、oracle plsqlでカンマ区切りの文字列を分割する方法はありますか?
- 25. コンマで区切られた文字列を小さな文字列に分割する
- 26. java ::文字列内の引用符をコンマで区切る
- 27. リスト内の分割要素をpythonでコンマで区切る
- 28. regexでコンマ区切りの文字列をキャプチャする
- 29. 文字列をCの区切り文字なしの文字列に分割
- 30. 文字列をbashの複数文字区切り文字に分割する方法は?
クール。どうもありがとうございました。 –
注記: ''、1,2''のような' AINPUT'の結果は返しませんが、 '' 1,2、' 'のような' AINPUT'の3つの部分文字列を返します。 – Wodzu