在where子句期间将十进制转换为日期

时间:2011-12-22 16:01:53

标签: sql database datetime db2

  

可能重复:
  Convert DB2 SQL Decimal to DATE

我有一个db2数据库,我想在select语句的where子句中将小数转换为日期。

小数日期 可以是12或13个字符长,具体取决于月份。

12个字符:

1 ,241,999.00应该成为:1999 / 1 / 24

13个字符:

12 ,241,999.00应该成为:1999 / 12 / 24

列名是DECIMALCOLUMN:

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

1 个答案:

答案 0 :(得分: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

使用这种在数据库中编码日期的简单方法,使该功能始终可用应该是非常宝贵的。