2010-06-09 3 views
2

Я использую две разные базы данных для моего проекта, Oracle и Apache Derby, и стараюсь как можно больше использовать синтаксис ANSI SQL, поддерживаемый обеими базами данных.using ansi sql синтаксис для форматирования Numeric

У меня есть стол с колонкой amount_paid NUMERIC(26,2).

Мой старый код, который с помощью Oracle DB, необходимый для получения значения в этом формате

SELECT LTRIM(TO_CHAR(amount_paid,'9,999,999,999,999.99')) 

Как преобразовать числовое значение для такой строки в формате «9,999,999,999,999.99» с помощью синтаксиса SQL ANSI?

ответ

5

Я думаю, что это неправильный подход. Маска формата предназначена для отображения, поэтому на самом деле это должно быть проблемой уровня представления. Весь ваш уровень доступа к данным должны сделать, это просто выполнить:

select amount_paid 
from your_table 
where .... 

Этот синтаксис будет очевидно работать независимо от базы данных приложение придает.

Затем введите код форматирования в интерфейсный центр, к которому он относится.

1

Мои знания не являются энциклопедическими, но насколько я знаю, нет функции ANSI, чтобы делать то, что вы хотите (хотя я был бы рад узнать, что я ошибаюсь :-). CONVERT конвертирует между наборами символов, но не делает, как я могу лучше видеть, работу по форматированию. CAST преобразует значения между типами данных, но, опять же, не выполняет форматирование.

Если Derby не поддерживает функцию TO_CHAR в стиле Oracle, возможно, вам придется свернуть свою собственную функцию, назовем ее MY_TO_CHAR. В Oracle реализация может быть

FUNCTION MY_TO_CHAR(nValue IN NUMBER, 
        strOracle_format IN VARCHAR2, 
        strDerby_format IN VARCHAR2) 
    RETURN VARCHAR2 
IS BEGIN 
    RETURN TO_CHAR(nValue, strOracle_format); 
END MY_TO_CHAR; 

В Дерби вы хотите, чтобы определить эту функцию таким же образом, принимая соответствующее значение и формат и вызов эквивалент Derby по TO_CHAR с форматирования строки Derby.

EDIT: Я согласен с @APC - многие из этих проблем исчезают, если вы не требуете, чтобы бэкэнд выполнял то, что в основном работает на лицевой панели.

Делитесь и наслаждайтесь.

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

  • Нет связанных вопросов^_^