类似于SQL

问题描述:

功能,我在查询类似于SQL

(Select d_name from Direction where d_name SIMILAR TO '(WEST|NORTH)%') 
this gives me the result as 
WEST 1 
WEST 2 
NORTH 2 
WEST 
NORTH 

工作,但我想要的结果作为

WEST 
NORTH 

与相同的语句异曲同工。有人请修改相同的查询以获得第二个结果。 感谢

+0

哪一个sql或Mysql – mohan111

+2

呃?尽管事实上你正在寻找的是完全匹配,你还是想用类似的东西吗?是不是有点像使用锤子来驱动螺丝寻求帮助? –

+0

@Damien_The_Unbeliever查询需求类似于。某处我需要选择可能类似于而不是类似的所有列。 – dhS

我得到了解决

Select d_name 
from Direction 
where d_name SIMILAR TO '(WEST|NORTH)' 

只是从查询中删除%

+0

但是,例如,如果'WEST'值不存在于表格的任何一行,但只有'WEST 1'类型的值,则不会有'WEST'作为结果与您的解决方案 – ddb

+0

@ddb:我的理解是,dhS _does_需要“精确”匹配。但是,如果需要“通配符”匹配,则需要将通配符添加到每个值:“SIMILAR TO”(WEST%| NORTH%)' –

+1

@a_horse_with_no_name,对于我而言,他/她想要什么不再清楚: )我认为我有一个清晰的想法,但我现在不这样做:)如果他/她对他/她自己的解决方案感到满意,那很好 – ddb

(select 'WEST' from Direction where d_name SIMILAR TO 'WEST%') 
UNION 
(select 'NORTH' from Direction where d_name SIMILAR TO 'NORTH%'); 
+0

谢谢你的回答。我得到了答案。 – dhS

+0

@dhS,不客气:)如果你想你可以接受我的答案,如果解决了你的问题 – ddb

+0

我upvoted它......不能接受,因为它是很长的路要走我需要一个较短的查询。 – dhS

如果你正在使用MySQL,因为它没有配备分裂字符串函数,你可以创建一个user defined function这一点,如下面的文章中描述的:

与该功能,你就可以建立自己的查询,如下所示:

SELECT DISTINCT SPLIT_STR(d_name, ' ', 1) 
FROM Direction 
WHERE d_name SIMILAR TO '(WEST|NORTH)%'; 

如果你不喜欢使用一个用户定义的函数,你不介意的查询是有点冗长,你也可以做到以下几点:

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(d_name, ' ', 1), ' ', -1) 
FROM Direction 
WHERE d_name SIMILAR TO '(WEST|NORTH)%'; 

声明:我根据这个新的答案上this解决方案