在搜索“SanF”时获取“旧金山”记录;
SELECT * FROM table WHERE col LIKE '%san%'; Works
SELECT * FROM table WHERE col LIKE '%san F%'; Works
SELECT * FROM table WHERE col LIKE %sanF%'; Not Working
答案 0 :(得分:7)
我担心?- add_grade([], name_grade(jim, 95), T1),
| add_grade(T1, name_grade(tom, 90), T2),
| get_grade(T2, tom, Grade).
T1 = tree(name_grade(jim, 95), [], [])
T2 = tree(name_grade(jim, 95), [], tree(name_grade(tom, 90), [], []))
Grade = 90 ;
false.
?- add_grade([], name_grade(tom, 90), T1),
| add_grade(T1, name_grade(tom, 85), T2),
| get_grade(T2, tom, Grade).
T1 = tree(name_grade(tom, 90), [], [])
T2 = tree(name_grade(tom, 85), [], [])
Grade = 85 ;
false.
?- add_grade([], name_grade(tom, 90), T1),
| add_grade(T1, name_grade(bill, 85), T2),
| get_grade(T2, ann, G).
false.
运算符不是进行基于文本搜索的查询的灵丹妙药。如果您确实希望将LIKE
的用户输入与包含sanF
的记录相匹配,则必须从列中删除空格,然后进行比较。
San Francisco
您还可以考虑在应用程序端对用户输入进行一些按摩,以便原始的两个SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%';
条件(LIKE
和'%san%'
)涵盖每个案例。
答案 1 :(得分:0)
SELECT * FROM table WHERE col LIKE '%sanF%'; will never work for 'San Francisco'
SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%';
正确使用。
但REPLACE
函数可能会变慢,您可以看到大型数据集的性能问题,即使查询成本很高。
人们通过在列上应用索引或尝试使用San F%
或%Francisco
来对其进行优化。
我们所做的是,而不是在侧面使用like,我们只是在单面上执行。
答案 2 :(得分:-2)
在你的php中,你可以用_
或%
替换所有空格。
或者您可以在查询中执行此操作:
SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '%'), '%')
SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '_'), '%')
希望这有帮助!