2013-12-10 104 views
0

我的Products表有近10,000條記錄,我希望「artist」(varchar)列名按Firstname and Lastname排序。在where子句中,我發送名字或姓氏的首字母。此查詢適用於少數記錄,但不適用於所有記錄,可能是因爲記錄的模式? 這裏是我的查詢SQL SERVER查詢選擇名字,姓氏

SELECT * FROM Products WHERE SUBSTRING(artist, 1, 1) Like 'C' 

犯規返回記錄...我想要的方式......很少的表(藝術家)列的記錄下面

Comtesse Mathilde duMonceau de Bergendael 
Mulholland, S.J. 
Cleminson 
NULL 
Samuel Jackson 

回答

1

LIKE條款是錯的。此外,你不應該使用LIKE都在這裏,因爲你只有一個字母過濾:

.... WHERE LEFT(artist, 1) = 'C' 

編輯LEFT實際上比SUBSTRING更快。

另外,您不能指望任何不是以C開頭的東西被返回,因爲您明確只要求輸入以C開頭的條目。

我猜你真正需要的是以下幾點:

.... WHERE LEFT(FirstName, 1) = 'C' OR LEFT(LastName, 1) = 'C' ORDER BY LastName, Firstname 

如果你只有Artist列,事情變得複雜,因爲你實際上需要使用LIKE,這使得事情很慢

.... WHERE Artist LIKE `%C%` 

返回任何藝術家,其名稱中包含名稱中任何地方的C。這也將返回這些:

Clemens Test 
Test Cutler 
Arachnophobia 
+0

它的工作在某些情況下只,而不是在所有的,有5+數據formt,查詢不能全部工作 – user580950

+0

LIKE'子句應該在任何情況下工作。告訴我一個它不工作的地方。 –

0

用戶這個where子句

where left(artist, 1) = 'C' 

where artist like 'C%'