Преобразовать DB2 SQL Decimal в DATE - PullRequest
3 голосов
/ 20 декабря 2011

Мне нужно конвертировать десятичные числа в дату.У меня есть поле десятичной даты, которое содержит такие данные:

  • 1 132 009,00 - 1/13/2009
  • 7 152 004,00 - 7/15/2004
  • 11 012 005,00 - 11/01/2005

    и т. Д.

Мне бы хотелось, чтобы оно читалось как xx / xx / xxxx .

Есть ли способ сделать это с помощью команд SQL или логики DB2 в операторе выбора?

SELECT  column1  from  table1  ;

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011
WITH x(decvalue) AS ( VALUES (DECIMAL(1132009.00)),(DECIMAL(7152004.00)),(DECIMAL(11012005.00)) )

SELECT CAST( 
    LPAD( RTRIM( CHAR( INTEGER( decvalue/1000000 ))), 2, '0' ) || '/' || 
    LPAD( RTRIM( CHAR( MOD( decvalue/10000, 100 ))), 2, '0' )  || '/' ||
    MOD( decvalue, 10000 ) 
AS CHAR(10)) 
AS chardateresult
FROM x
;
1 голос
/ 21 декабря 2011

Используя те же значения WITH, что и @Fred, я придумал:

WITH x(decvalue) AS ( VALUES (DECIMAL(1132009.00)),(DECIMAL(7152004.00)),(DECIMAL(11012005.00)) )

SELECT TO_DATE(CHAR(CAST(decvalue AS DECIMAL(8,0))), 'MMDDYYYY')
FROM x

Предполагается, что ваши входные значения не будут длиннее 8 цифр (2 для месяца, 2 для дня, 4 для года), в противном случае вы получите ошибку переполнения при приведении. Он также потерпит неудачу, если не будет хотя бы какого-то значения для каждого месяца, дня и года (например, 00002011 не будет работать, но 01012011 будет).

...