Firebird - выберите поле с именем start

У меня странная проблема. Клиент назвал поле в FirebirdSQL start, Теперь я не могу выбрать это поле:

select t.start from table t

Дает мне ошибку: Invalid token

Любая идея о том, как я могу выбрать это поле?

1 ответ

Решение

Слово start это зарезервированное слово в Firebird и поэтому должно быть заключено в кавычки. Символ кавычки в Firebird - это двойная кавычка. Так что вам нужно использовать:

select t."start" from "table" t

Обратите внимание, что я процитировал table так же как и зарезервированное слово. Цитирование делает имя чувствительным к регистру, поэтому вам может понадобиться "START" а также "TABLE",

В ваших комментариях вы упоминаете, что цитирование дает постоянное значение 'table', Это означает, что вы используете диалект 1, устаревший (и устаревший) диалект Firebird. Этот устаревший диалект не может заключать в кавычки имена объектов, а двойная кавычка предназначена для строковых литералов (рядом со стандартными одинарными кавычками SQL). Либо ваша база данных является базой данных диалекта 1, либо вы указали неправильный диалект соединения в вашей библиотеке соединений.

Если ваша база данных на самом деле является диалектом 3, решить это так же просто, как указать диалект соединения 3 (или 0 для автоматического выбора на основе диалекта базы данных). Однако, если ваша база данных является базой данных диалекта 1, вам нужно будет перейти на диалект 3, чтобы решить эту проблему.

Если это просто для того, чтобы попробовать: убедитесь, что вы создали базу данных диалекта 3 (для большинства инструментов это по умолчанию).

Как определить диалект базы данных

Чтобы определить диалект базы данных, вы можете использовать инструмент gstat:

gstat mydatabase.fdb -header

В последних версиях Firebird вы также можете запросить MON$DATABASE таблица мониторинга. Большинство инструментов запросов также позволяют просматривать свойства базы данных.

Как перейти с диалекта 1 на диалект 3

То есть я считаю слишком сложным, чтобы писать здесь (и я никогда не делал это сам, как это считалось устаревшим несколько лет назад). Однако в Interbase 6.0 Getting Started (доступно из Firebird: Справочные руководства (в конце страницы) описан базовый процесс миграции, и я уверен, что есть страницы, которые можно найти с некоторым поиском в Google.

Другие вопросы по тегам