2011-12-22 4 views
1

Можно создать дубликат:
Convert DB2 SQL Decimal to DATEпреобразовать десятичный до настоящего времени в течение где п

У меня есть база данных db2 и я хочу, чтобы преобразовать десятичный в дату во время ИНЕК в избранном заявление.

Днем после запятой может быть быть длиной 12 или 13 символов в зависимости от месяца.

12 символов:

, 241,999.00 должны стать: 1999//24

13 символов:

, 241,999.00 должны стать: 1999//24

Имя столбца DECIMALCOLUMN:

Select * from table1 WHERE 
cast(replace(convert,DECIMALCOLUMN,date)) = @date 
+0

В чем вопрос? – wallyk

+0

Вопрос в том, как мне преобразовать десятичную дату (12-13 символов) в формат даты. В этом примере год также перемещается в начало даты. – tdjfdjdj

+0

Обратите внимание, что попытка конвертировать числовое поле непосредственно в поле даты приведет к непредвиденным значениям - DB2 считает числовой ввод числом _ дней (-1) с 0001-01-01 –

ответ

1

Я вижу: Вы хотите, чтобы какой-то способ перестановки цифр числа, чтобы стать Дата. Похоже, что кодировка [m]mddyyyy. (Почему в базе данных нет данных date?)

Число должно быть преобразовано в строку, а затем подстроки упорядочены и преобразованы в дату. Учитывая сложности здесь, вместо того, чтобы поле было изменено, чтобы быть правильным типом данных, должна быть записана функция преобразования. Что-то вроде этого должны сделать это (непроверенные, отсутствие доступа к db2):

create function decimaldate(decdate DECIMAL) 
returns DATE 
return 
with tmp (dstr) as 
(
    select substr(digits (decdate),8) 
    from sysibm.sysdummy1 
) 
select 
    date (substr(dstr,4,4) || '-' || 
     substr(dstr,1,2) || '-' || 
     substr(dstr,3,2) 
     ) 
from tmp 

Это преобразует число в строку, переформатирует строку как yyyy-mm-dd и преобразуется в дату. (Я использовал this в качестве основы.)

Таким образом, решение к первоначальному вопросу просто написать:

SELECT * 
FROM table1 
WHERE decimaldate(DECIMALCOLUMN) = @date 

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

+0

Это прекрасно. Ты прав. Спасибо. Проблема только в том, что у меня только выбор доступа. Я не могу создать функцию в db. Есть ли способ выбрать код? – tdjfdjdj

+0

@ user719825: Попробуйте следующее: 'WHERE date (substr (цифры (DECIMALCOLUMN), 4,4) || '-' || substr (цифры (DECIMALCOLUMN), 1,2) || '-' || substr (цифры (DECIMALCOLUMN), 3,2)) = @ date'.Yucky, но функционально эквивалентен. Если есть какие-либо проблемы, попробуйте отобразить выражение и 'decimalcolumn', чтобы увидеть, что может быть неправильным. – wallyk

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