質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

1133閲覧

Spring java 完全一致・前方一致 両立

EDM

総合スコア30

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2020/11/20 04:30

編集2020/11/20 05:40

完全一致と前方一致の両立させるにはどうしたらいいのでしょうか?

データベースから一致したデータを出力したいのですが
例えば
seikana   / meikana
ヘノ / タロウ
ヘノダ / タロウ
ヘノダモヘジ / タロウ
トウキョウ / タロウ 
というデータがあります。

現在だと
BeanにseiKana,meiKanaというフィールド用意 
テキストボックスに入力し格納します。

そしてこれが実行される
Service.java

Service.java

1if(bean.seiKana.equals("")) 2 { 3 bean.seiKana = "%"; 4 }else 5 { 6 bean.seiKana = bean.getSeiKana() + "%"; 7 } 8if(bean.meiKana.equals("")) 9 { 10 bean.meiKana = "%"; 11 }else 12 { 13 bean.meiKana = bean.getMeiKana() + "%"; 14 }

テキストボックスseiKanaが空文字
テキストボックスmeiKanaがタロウ  の場合
ヘノ  タロウ
ヘノダ  タロウ
ヘノダモヘジ  タロウ
トウキョウ  タロウ    が出力

テキストボックスseiKanaが”ヘ”
テキストボックスmeiKanaがタロウ  の場合”ヘ”の前方一致で
ヘノ  タロウ
ヘノダ  タロウ
ヘノダモヘジ  タロウ が出力   //トウキョウ タロウは消える

ここでテキストボックスseikanaが”ヘノ”
テキストボックスmeiKanaがタロウ  の場合
今の状態だと”ヘノ”に対して前方一致の処理がはいるため
ヘノ   タロウ
ヘノダ  タロウ
ヘノダモヘジ  タロウ 
が出力されるのですが、

ヘノ  タロウ だけ出力したい

完全一致するデータがあれば前方一致の処理にはいかずそこで処理終了
としたいのです。

こうなるのかな?
Service.java

Service.java

1if(bean.seiKana.equals("")) 2 { 3 bean.seiKana = "%"; 4 } else if(bean.seiKana.equalse(bean.seiKana)) 5 { 6 bean.seiKana = bean.getSeiKana(); 7 } else 8 { 9 bean.seiKana = bean.getSeiKana() + "%"; 10 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/20 04:33

そもそも完全一致なら%要らないのでは
EDM

2020/11/20 04:40

そうでした。%いりませんね。質問訂正しときます。
dodox86

2020/11/20 04:47

困っている現状の説明だけで、結局どうなって欲しいのか分からないです。完全一致と前方一致の併用、という時点でもう分かりません。分からないのは私だけかもしれませんが。
EDM

2020/11/20 04:50

ヘノ タロウ と入力したら ヘノ タロウ だけ出したいのですが 現状 ヘノ タロウ ヘノダ タロウ も出力されてしまうのを改善したいのです。 ただ、ヘ と入力するときもあるかもしれないため、前方一致の処理は必要です。そのため、併用という言葉を使わせていただきました。
dodox86

2020/11/20 04:55

> ただ、ヘ と入力するとき 「ヘ」だけだと「ヘノ」も「ヘノダ」も候補に入るのは自然かと思うのですが、前方で複数一致した場合、もっとも文字列長が短く、かつ辞書順の文字列の最初の1件のみを採用する、とでもいうルールなのでしょうか。
EDM

2020/11/20 05:06

そのようなルールではないです。 「ヘノ」だけ入力された場合、データベースに「ヘノ」がある場合はヘノのみを出す。現状は「ヘノ」だけ入力されるとデータベースに「ヘノ」があって完全一致するのに、「ヘノ」に前方一致の処理が入り、「ヘノダ」も出力される。 同姓同名も考えているため、1件のみではないです。
q_sane_q

2020/11/20 05:32

やりたいことは(多分)わかるんですがどの層の処理でやりたいんでしょうか SQL?
EDM

2020/11/20 05:37 編集

Serviceですね。コード題名修正します。 サービスのメソッドの処理です。 その後いろいろ行ってDaoでバインド変数にすることで入力した内容がそのままSQLで利用できるようにしています。
guest

回答1

0

ベストアンサー

とりあえずSQLでそれっぽい挙動をすると思われるのを書いておきます
SQLServerで書いたので他のDBだと書き方が違うかと

SQL

1SELECT * 2FROM tablename 3WHERE seikana LIKE COALESCE((SELECT TOP 1 seikana 4 FROM tablename WHERE seikana = 'ヘノ'), 'ヘノ' + '%')

'ヘノ' の部分に入力された文字列が入るように処理を書いたらどうでしょうか?

ただ、もっといい書き方あるかもしれないです

投稿2020/11/20 05:46

編集2020/11/20 06:34
q_sane_q

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EDM

2020/11/20 09:27 編集

ありがとうございます! SQLを使用する時には参考にします。 あの後いくつか調べてみてこの質問の内容がおかしいということに気付きました。 例えば キ さん キムラ さん がいた場合、自分の考えだと キ さん しか出ないわけで 検索の処理としておかしいということに気付きました。 そしてif文ではなく bean.seiKana += % にすれば短くなることも把握しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問