Проблема синтаксиса SQL при переходе в среду MariaDB - PullRequest
0 голосов
/ 14 октября 2019

Я обновляю некоторый синтаксис SQL, потому что мы переходим из среды Sybase / SQL Anywhere в MariaDB. Один из запросов, с которыми я сталкиваюсь, заключается в следующем:

UPDATE
  DBA_clients
SET
  DBA_clients.patient_firstname = Trim([patient_firstname]),
  DBA_clients.patient_lastname = Trim([patient_lastname])
WHERE
  (((DBA_clients.patient_firstname) Like "* *"))
  OR (((DBA_clients.patient_lastname) Like "* *"));

В частности, синтаксическая ошибка связана с [patient_firstname] и [patient_lastname]

Я пробовал различные изменениявключая размещение названий этих столбцов в кавычках. В чем здесь проблема синтаксиса и как я могу ее решить?

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Удалите escape-символы для идентификаторов:

UPDATE DBA_clients
    SET patient_firstname = Trim(patient_firstname),
        patient_lastname = Trim(patient_lastname)
    WHERE patient_firstname Like '* *' OR
          patient_lastname Like '* *';

Идентификаторы в порядке. Их не нужно экранировать.

Я удалил ссылки на таблицы, потому что запрос ссылается только на одну таблицу - и механизм включения более коротких псевдонимов таблиц отличается в двух базах данных.

Я также предполагаю, что вы ищете пробелы в именах, а не точное совпадение с '* *'. Если это так, правильный подстановочный знак (как в SQL Server, так и в MariaDB) равен '%':

UPDATE DBA_clients
    SET patient_firstname = Trim(patient_firstname),
        patient_lastname = Trim(patient_lastname)
    WHERE patient_firstname Like '% %' OR
          patient_lastname Like '% %';
0 голосов
/ 14 октября 2019

У вас есть синтаксическая ошибка. Снимите квадратные скобки с параметра «Обрезать».

Обрезать ([имя-пациента]) до Обрезать (имя-пациента)

0 голосов
/ 14 октября 2019

Здесь https://mariadb.com/kb/en/library/identifier-names/ он говорит, что нормальный символ кавычки в MariaDB является обратным трюком, поэтому попробуйте это:

UPDATE
  DBA_clients
SET
  DBA_clients.patient_firstname = Trim(`patient_firstname`),
  DBA_clients.patient_lastname = Trim(`patient_lastname`)
WHERE
  (((DBA_clients.patient_firstname) Like "* *"))
  OR (((DBA_clients.patient_lastname) Like "* *"));
...