Deutsch

Как сейчас с работой'24?

17.10.24 10:47
Re: Как сейчас с работой'24?
 
Программист коренной житель
вот например можешь сказать отличие оператора LIKE в Oracle и MS SQL?

Зачем мне это знать? :)

Если писать запросы для оракла, то единожды нагуглив особенности, будешь их знать и использовать.

Где-то наверное нужно использовать в работе и МС и оракл, но это все-таки исключение. Обычно используется только одна БД.


Что касается твоего вопроса, то ChatGPT отвечает на него так:

Оператор LIKE используется для поиска строк, соответствующих шаблону, в обоих Oracle и Microsoft SQL Server. Несмотря на схожесть, существуют небольшие различия в их использовании и поведении:
1. Чувствительность к регистру

    Oracle: По умолчанию LIKE чувствителен к регистру. Это значит, что запрос LIKE 'ABC' не найдет строки abc.
        Для нечувствительного к регистру поиска можно использовать функции, такие как UPPER() или LOWER(). Пример:

        sql

        SELECT * FROM table_name WHERE UPPER(column_name) LIKE 'ABC';

    MS SQL Server: Чувствительность к регистру зависит от сортировки (collation) столбца или базы данных.
        По умолчанию часто используется сортировка, не чувствительная к регистру. То есть запрос LIKE 'ABC' найдет и строки abc.

2. Маски символов

    Oracle и MS SQL Server:
        % — соответствует любому количеству символов (включая ноль).
        _ — соответствует одному любому символу.
        Пример:

        sql

        SELECT * FROM table_name WHERE column_name LIKE 'A%';

    Найдет строки, которые начинаются с "A".

3. Спецсимволы и экранирование

    Oracle: Для экранирования специальных символов (например, %, _) используется ключевое слово ESCAPE. Пример:

    sql

SELECT * FROM table_name WHERE column_name LIKE '50\%' ESCAPE '\';

Это позволит найти строки, содержащие 50%.
MS SQL Server: Аналогично, но символ экранирования должен быть указан явно. Пример:

sql

    SELECT * FROM table_name WHERE column_name LIKE '50!%' ESCAPE '!';

4. Поиск с учетом символов новой строки

    Oracle: Оператор LIKE учитывает символы новой строки. Это значит, что строка, содержащая перевод строки, может не соответствовать шаблону, ожидающему только символы на одной строке.
    MS SQL Server: По умолчанию перевод строки не мешает совпадению шаблона с LIKE, что может привести к различным результатам по сравнению с Oracle.

5. Использование регулярных выражений

    Oracle: В дополнение к LIKE, поддерживает оператор REGEXP_LIKE, который позволяет использовать регулярные выражения для более сложного поиска. Пример:

    sql

    SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, '^A.*');

    MS SQL Server: Оператор LIKE не поддерживает регулярные выражения. Для сложного поиска необходимо использовать другие методы, такие как функции PATINDEX() или CHARINDEX(), либо CLR-функции.

Основные различия:

    Регистрозависимость: В Oracle регистрозависимость по умолчанию, в MS SQL Server — зависит от сортировки.
    Экранирование: Синтаксис экранирования спецсимволов похож, но важно учитывать, как указать символ экранирования.
    Поддержка расширенных шаблонов: В Oracle есть оператор REGEXP_LIKE для регулярных выражений, в MS SQL Server — нет.

Эти различия нужно учитывать при переносе запросов между Oracle и MS SQL Server.


Мелкие отличия, ничего особенного.

 

Перейти на