2011-10-01 60 views
0

顯示所有行HIREDATE是1981年4月1日之前和 員工的名字是從A至SMySQL的語句 - 模式匹配等

這是我做的代碼,它不起作用。 :(當我試圖把AND之間'%A'和'%S'它也不工作。:(當我刪除'%S'它的工作,但它只會檢索名稱以字母A開頭的記錄:(
你能你們幫忙嗎?我真的不知道該怎麼做。:(

SELECT * 
FROM tblEmployee 
WHERE HIREDATE < '1981-04-1' 
AND ENAME LIKE '%A' '%S' 

感謝。^^

+0

你想要的名字以A開頭的-S?或以A-S結尾的名字?或者以A **和**以S結尾的名字? –

回答

1

你曾經很親密。我想你想的名字開始從A,B,C。 S(不以AS結尾)對吧?

如果是的話,試試這個:

SELECT * 
FROM tblEmployee 
WHERE HIREDATE < '1981-04-01' --- notice the -01 
    AND ENAME >= 'A' 
    AND ENAME < 'T' 
+0

謝謝!很大的幫助。它工作:) – LittleMissChoco

+0

再次提出另一個問題如果問題如何: /* 從tblemployee檢索所有列,其中COMM不爲空,((ENAME的第一個字符以A開頭或ENAME的第二個字符爲A) */ ... ENAME LIKE'A%'.. 如果第二個字符是A,那麼我的下一個語法是什麼? – LittleMissChoco

+0

「ENAME的第二個字符是A」,使用:'ENAME LIKE'_A%'''_'是**一個字符**的特殊編碼。 '%'表示**任意數量的任何字符**。 –

1

使用

SELECT * FROM tblEmployee WHERE HIREDATE < '1981-04-01' AND SUBSTR (ENAME, 1, 1) BETWEEN 'A' AND 'S' 
+0

它不起作用:( – LittleMissChoco

+1

這是正確的,但是'ENAME'的索引不能用於當一個函數,比如'SUBSTR )'被調用。所以,查詢將不得不進行全面掃描(對於所有在1981-04-01之前有僱用的行)。 –

0

TRY

SELECT * FROM tblEmployee WHERE HIREDATE < '1981-04-1' AND ENAME REGEXP '^[a-s]+$' 

REFERENCE

+0

它可以工作,但它只能從AS中檢索:(當我試着用名字開頭W也被檢索:( – LittleMissChoco

+0

不,它在這裏工作,你把'^'。再次看到我的sql – diEcho

+0

我在這裏測試(名稱以'w'開頭),它返回'0',即工作正常 – diEcho