0

ワイルドカードをデータベースに保存する方法と、文字列がどの行に一致するかを確認する方法を知っている人はいますか? それはできますか?

たとえば、DB には次のようなテーブルが含まれます。

列 1 にワイルドカードを含む 2 列のテーブル

したがって、john3136 は通常の給与の 10 倍を受け取る必要があります。fred3136 は通常の半分の給料を受け取ることになります。一致するデータがないため、harry3136 はおそらくアプリをクラッシュさせます ;-)

コードは次のようにする必要があります。

foreach(Employee e in all_employees) {
    SELECT Multiplier FROM PayScales WHERE
        //??? e.Name matches the PayScales.Name wildcard
}

ありがとう!

編集 これは現実の問題です。ワイルドカードを含むパラメーター ファイルを持っています。コードは現在、従業員を反復処理し、一致するものを探して param ファイルを反復処理します。なぜ「データベース化」したいのかがわかります ;-)

ワイルドカードはオプションです。行は、1 人の従業員のみに一致するように「john3136」と言うことができます。(実際のアプリは実際には従業員ではないため、この単純な例ではやり過ぎに見えても意味があります)

開いている 1 つのオプション: 始める前にすべての従業員の名前を知っているので、それらを繰り返し処理して、一時テーブルでワイルドカードを効果的に展開できます。(したがって、開始テーブルに john3136* がある場合、従業員のリストに基づいて john3136、john31366 などに展開される可能性があります)。より多くのメンテナンスが必要になるため、これよりも良い方法を見つけたいと思っていました (たとえば、従業員を追加する機能を追加する場合、拡張されたワイルドカード テーブルを維持する必要があります)。

4

1 に答える 1

0
SELECT * FROM payscales 
 WHERE e.Name 
  LIKE regexp_replace(name, E'^\\*|\\*$', '%', 'g');

使用しているデータベースがわかりません。上記のクエリは機能しpostgresql、末尾と先頭%のワイルドカードをワイルドカードに置き換えますLIKE

ワイルドカードが存在しない場合は、文字列全体と一致する必要があります。

于 2013-01-10T08:28:06.450 に答える