2011-02-08 2 views
1

Краткое описание приложения:
Я написал приложение Delphi, которое позволяет пользователю запускать запрос через базу данных MySQL или базу данных DB2. Для выполнения запроса приложение использует компонент TADOQuery.Ошибка SQL SUBSTR: что такое правильный синтаксис?

Приложение использует простой интерфейс для построения строки запроса, позволяя пользователям без знания SQL строить запросы. Ни в коем случае пользователь не видит SQL - все на простом английском языке, так что даже нетехнические пользователи могут понять, что они делают.

Приложение проверяет параметры, введенные пользователем с помощью интерфейса построения запросов, и создает инструкцию SQL в фоновом режиме, отправляя ее без фактического просмотра самого SQL.

Проблема:
Некоторые из запросов используют подстроки для извлечения данных из в определенных областях. Когда я использую инструкцию SUBSTR, я не добавляю пробелы после запятых в инструкции SUBSTR. Например, SUBSTR (поле, 1,10).

Это замечательно в большинстве случаев, но когда языковой стандарт на ПК установлен на другом языке с английского языка (например, голландский, измененный с помощью апплета региональных настроек в панели управления Windows), оператор SUBSTR в этой форме не работает при работе над базой данных DB2 (это выглядит отлично по сравнению с MySQL).

Чтобы получить SUBSTR для правильного выполнения в этой конкретной локали, мне нужно добавить пробелы после запятых. Например, SUBSTR (поле, 1, 10).

Поиск правильного синтаксиса для оператора SUBSTR показывает примеры как с запятыми, так и без них, хотя, очевидно, я обнаружил проблемы, когда не включал запятые, поэтому я был бы склонен идти с версией с пробелами. Однако я хочу знать, является ли это окончательным синтаксисом, независимо от того, получаю ли я какие-либо проблемы с использованием SUBSTR таким образом, и в качестве бонуса, почему я получаю ошибку, когда я не использую пробелы после запятые в первую очередь.

ответ

5

Правильный способ с пространством или без него. Пробелы являются необязательными и не анализируются, вы можете даже иметь 10 пробелов после запятой и 3 раньше, если хотите (просто произвольные числа).

Причина, по которой SUBSTR (поле, 1,10) не работает в некоторых локалях из-за выделенной части. В европейских странах знак десятичной запятой является запятой, а не периодом. Поместив пробел и сделав его SUBSTR (поле, 1, 10), 1, 10 очень четко разделен на два параметра, поэтому больше не возникает путаницы.

Смежные вопросы