Конвертировать представления SQL Server в формат MySQL
Миграция Microsoft SQL сервера на MySQL - достаточно сложный и многоэтапный процесс. Остаточно часто появляется необходимость в преобразования запросов с учетом требований синтаксиса MySQL. Диалекты SQL, которые применяются представленными серверами похожи, но все же имеют некоторые отличия. В этой статье мы разберемся в 10 различиях в синтаксических конструкциях, с которыми чаще всего можно столкнуться при создании SQL запросов. Тема будет раскрыта с учетом того, что у целевой аудитории имеются уже базовые знания в правлении БД и практическими навыками конструирования SQL запросов:
- Достаточно часто имена таблиц или полей в MS SQL оформлены в скобки квадратной формы в самих запросах (например, если в имени имеется пробел). MySQL не работает с квадратными скобками. Поэтому их необходимо в обязательном порядке изменить на обратные кавычки ` или удалить: [object] -> `object`.
- В MS SQL доступны для использования инструменты, которые исключают появление конфликтов между именами и позволяют управлять привилегиями доступа к данным. Данным инструментом является специально созданная схема, логически контейнер, которые применяется на практике для группировки по выбранным ранее показателям объектов БД. На момент применения схем в запросах Microsoft SQL полное имя приобретает следующий вид: %database%.%schema%.%object%. Но представленное решение не используется в MySQL.
- Функция CONVERT() применяется на практике в Microsoft SQL для преобразования выражений одного типа в иной. Сервер MySQL функцию CONVERT() использует для преобразования данных в виде текста между различными кодовыми страницами. Для конвертирования типов в MySQL применяется на практике функция CAST(), следовательно. Все выражения 'convert(%type%, %expression%)' в запросе MS SQL должны быть замены 'cast(%expression% AS %type%)' в запросе MySQL.
- Опция LEN() отвечает за возврат исходной длины выражению, имеющему текстовый тип в MS SQL. В MySQL аналогичной функцией является LENGTH().
- Microsoft SQL функция DATEADD() используется для добавления интервала к отмеченной части значения типа DATE. Если же рассматривать MySQL, то за выполнение данного действия отвечает оператор '+'. Отдельно нужно остановиться на способе преображения синтаксических конструкций. В запросах они должны иметь такой вид: DATEADD(year, 1, %expression%) заменить на %expression% + interval 1 year, DATEADD(month, 1, %expression%) заменить на %expression% + interval 1 month, DATEADD(day, 1, %expression%) заменить на %expression% + interval 1 day.
- Опция GETDATE() в MS SQL применяется для возврата текущего времени и даты. Аналогичным решением в MySQL считается NOW().
- В MS SQL оператор '+' помогает при минимальных усилиях провести объединение строк: 'string1' + 'string2'. В MySQL нужно строки перевести в следующий вид: CONCAT('string1', 'string2').
- Опция MS SQL CONTAINS(expression, template) отвечает за своевременность проверки точности вхождения строкового выражения 'template' в 'expression'. В MySQL применяется оператор LIKE, с помощью которого выполняется такая же опция: expression LIKE %template%;
- В том случае, когда запрос Ms. SQL включает 'TOP (100) PERCENT', нужно пропустить при формировании запроса MySQL. При значении, отличном от 100 может применяться такой код: SET @amount =(SELECT COUNT(*) FROM %table name%) * %percentage% / 10;
PREPARE STMT FROM '%original query% FROM %table name% LIMIT ?';
EXECUTE STMT USING @amount;
Мы рассмотрели в данной статье самые частые ситуации. Для автоматизации процесса с целью экономии времени и сокращения количества ошибок рекомендуется использовать коммерческие инструменты. С хорошей стороны на практике себя показал конвертер MSSQL-to-MySQL - разработка компании Intelligent Converters: http://www.intelligent-converters.ru/mssql-to-mysql.htm.
Предыдущая статья Следущая статья
Вернуться