#mysql
#mysql
Вопрос:
отобразить все строки, в которых дата найма указана до 1 апреля 1981 года, а имя сотрудника — от A до S
Это код, который я сделал, и он не работает. 🙁 Когда я попытался вставить AND
между '%A
‘ и '%S'
это тоже не работает. 🙁 Когда я удалил '%S'
, это сработало, но оно будет извлекать только запись с именем, начинающимся с буквы A
. 🙁
Вы, ребята, можете помочь? Я действительно не знаю, что делать. 🙁
SELECT *
FROM tblEmployee
WHERE HIREDATE < '1981-04-1'
AND ENAME LIKE '%A' '%S'
Спасибо. ^^
Комментарии:
1. Вам нужны имена, начинающиеся с A-S? Или имена, заканчивающиеся на A-S? Или имена, начинающиеся с A и заканчивающиеся на S?
Ответ №1:
Вы были близки. Я предполагаю, что вам нужны имена, начинающиеся с A, B, C, … S (не заканчивающиеся на A-S). Верно?
Если да, попробуйте это:
SELECT *
FROM tblEmployee
WHERE HIREDATE < '1981-04-01' --- notice the -01
AND ENAME >= 'A'
AND ENAME < 'T'
Комментарии:
1. еще один вопрос, как насчет того, если вопрос заключается в следующем: /* Извлеките все столбцы из tblemployee, где COMM не равен null и (первый символ ENAME начинается с A или второй символ ENAME — A) */ … ВВЕДИТЕ ИМЯ, ПОДОБНОЕ ‘A%’ .. каким будет мой следующий синтаксис, если вторым символом будет A?
2. для «второго символа ENAME является A» используйте:
ENAME LIKE '_A%'
The_
— это специальная кодировка для одного символа .%
означает любое количество любых символов .3. Смотрите также здесь для объяснения двух подстановочных знаков
%
и_
используемых вLIKE
: learn-sql-tutorial.com/SimpleSelects.cfm#h1.144. И здесь вы тоже можете попрактиковаться: sqlzoo.net (но не так много ПОДОБНЫХ примеров / вопросов)
Ответ №2:
Использовать
SELECT * FROM tblEmployee WHERE HIREDATE < '1981-04-01' AND SUBSTR ( ENAME, 1, 1 ) BETWEEN 'A' AND 'S'
Комментарии:
1. Это правильно, но индекс
ENAME
не может использоваться при вызове функции, напримерSUBSTR()
. Таким образом, запрос должен будет выполнить полное сканирование (для всех строк с hiredate до 1981-04-01.)
Ответ №3:
ПОПРОБУЙТЕ
SELECT * FROM tblEmployee WHERE HIREDATE < '1981-04-1' AND ENAME REGEXP '^[a-s] $'
Комментарии:
1. это работает, но оно должно извлекаться только из A-S: ( когда я попробовал, также было извлечено имя, начинающееся с W : (
2. Я протестировал здесь (имя начиналось с
w
), и оно возвращает0
, т. Е. Работает нормально