Помощь новичку

Тема в разделе "Базы данных", создана пользователем zek24, 29 апр 2011.

Модераторы: latteo
  1. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    780
    Симпатии:
    238
    Привет, только вчера начал изучать SQL по одной книге, и уже столкнулся с непонятным.
    Пишу в MSAccess следующий код

    SELECT *
    FROM Customers
    WHERE cust_contact LIKE '[!JM]*'
    ORDER BY cust_contact;


    Все работает- выводятся данные, которые начинаются не с J и не с M.

    Теперь пытаюсь написать тоже используя ключевое слово NOT

    SELECT *
    FROM Customers
    WHERE NOT cust_contact ='[JM]*'
    ORDER BY cust_contact;


    Но в результате выводится все данные таблицы. Уже более часа пытаюсь понять почему NOT не хочет работать в паре с [].

    В этом случае

    SELECT *
    FROM Customers
    WHERE NOT cust_contact ='J*'
    ORDER BY cust_contact;


    также выводятся все данные.
    Подскажите, как правильно написать код.
    Спасибо.
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.035
    Симпатии:
    703
    попробуй NOT LIKE
     
    zek24 нравится это.
  3. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    780
    Симпатии:
    238
    Да вот только что сам нашел в анг. варианте книги - наши издатели поленились лишний абзац вставить.
    Зато надолго запомню)

    Уточню = используют при точном поиске\сравнении, а LIKE при неточном (__ и %)?
     
  4. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    780
    Симпатии:
    238
    Новый день, новая учеба и новые вопросы.

    Прохожу сейчас манипуляцию над тестом. Задался вопросом, как выбрать только те строки, которые начинаются с большой(маленькой) буквы?

    SELECT vend_name
    FROM Vendors
    WHERE vend_name LIKE UCASE(?)
    ORDER BY vend_name;

    В ответ: "Введите значение параметра ?".
    За пол-часа меня так и не осенило, вот и решил уточнить.
    Подскажите.
    Спасибо.

    По ходу обучения возник еще вопрос о подзапросах, точнее о том, как их лучше писать для дальнейшего легкого чтения, и не путаться во вложениях.
    Практикуюсь в Access, а там, как я понимаю комментарии отсутствуют. Что подскажете?
     
  5. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Функция UCASE - переводит строку в верхний регистр. она явно не подойдет.
    тут другое условие:
    SELECT vend_name
    FROM Vendors
    WHERE vend_name LIKE '[A-Z]*'
    ORDER BY vend_name;
     
    zek24 нравится это.
  6. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    780
    Симпатии:
    238
    как удалить разный текст из всех строк столбца

    Подскажите, как удалить разный текст из всех строк столбца, который(текст) находиться между двумя повторяющимися сочетаниями знаков. В PHPMyAdmin - mySQL.
    Пример:
    левое повторяющееся сочетание - ЛПС
    Правое повторяющееся сочетание - ППС
    Текст, который нужно удалить - ТНУ
    какой-то текст... ЛПС... ТНУ1...ППС...какой-то текст
    какой-то текст... ЛПС... ТНУ2...ППС...какой-то текст
    какой-то текст... ЛПС... ТНУ3...ППС...какой-то текст
    какой-то текст... ЛПС... ТНУ4...ППС...какой-то текст
    ...
    какой-то текст... ЛПС... ТНУn...ППС...какой-то текст
    ?
     
  7. Rheola

    Rheola Создатель

    Регистр.:
    12 фев 2009
    Сообщения:
    19
    Симпатии:
    5
    Как удалить не сообразила, но я сделала подобное длинный способ (через задницу, но все-таки)

    создать таблицу из запроса

    SELECT id,
    CONCAT( MID(pole,1, POSITION('ЛПС' IN pole) +3),
    MID(pole,LOCATE('ППС', pole,1) ,
    (LENGTH(pole)-LOCATE('ППС', pole,1))))
    FROM base where
    POSITION('ЛПС' IN pole) >0 and LOCATE('ППС', pole,1) > 0


    оно как раз выберет текст в поле как надо, а потом обновить старую таблицу, где совпадают id