2017-08-16 14 views
0

私はMySQLテーブルを持っており、そこからいくつかのフィールドを取得する必要があります。 H_HP_を含む文字列が必要です。別々に2つのクエリを使用します。MySQL - 文字列の検索に "_"が含まれています。

しかし、問題はアンダースコアがワイルドカードにあり、正しい結果が見つからないということです。

HP_

SELECT nc.`logname`, nc.`client_id`, nc.`Customer_Name`, cb.`bwm_day_cir_upload`, cb.`bwm_day_cir_download` 
FROM `new_client` nc 
LEFT JOIN `client_bandwidth` cb ON cb.`client_id` = `nc`.`client_id` 
WHERE nc.`logname` LIKE '%HP_%' AND nc.`Active` = 'y' ORDER BY TRIM(UPPER(nc.`logname`)) 
+1

「\ _」をエスケープします。 – lad2025

+1

そして、このような問題に遭遇したときには、まずドキュメントをチェックする価値があります。 [like'のMySQLのドキュメント](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like):_ "ワイルドカード文字のリテラルインスタンスをテストするには、 'ESCAPE'文字を指定しないと' \\ 'とみなされます。" _ –

+0

@MarkRotteveel、提案をありがとう。 –

答えて

1

のクエリ例あなたはそれがワイルドカードだ語ったよう。それからちょうど救助に'\_'

SELECT nc.`logname`, nc.`client_id`, nc.`Customer_Name`, cb.`bwm_day_cir_upload`, cb.`bwm_day_cir_download` 
FROM `new_client` nc 
LEFT JOIN `client_bandwidth` cb ON cb.`client_id` = `nc`.`client_id` 
WHERE nc.`logname` LIKE '%HP\_%' AND nc.`Active` = 'y' ORDER BY TRIM(UPPER(nc.`logname`)) 
1

ドキュメントでエスケープ!あなたは以下のページ読みました:

エスケープ文字で、それに先行し、ワイルドカード文字のリテラルインスタンスをテストするには:https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like

をここに抜粋です。 ESCAPE文字を指定しない場合、\は となります。

  • \%は1%文字に一致します。

  • \_は1文字に一致します。

+0

私はここからチェックしていませんが、別の場所からやっています。共有に感謝します。 –

関連する問題