Операторы MySQL — сопоставление с образцом и т. Д

#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.14

4. И здесь вы тоже можете попрактиковаться: 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 , т. Е. Работает нормально