2016-07-06 105 views
1

功能,我在查詢類似於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

回答

1

我得到了解決

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

2
(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

1

如果你正在使用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解決方案