【问题标题】:convert decimal to date during where clause [duplicate]在where子句期间将十进制转换为日期[重复]
【发布时间】:2011-12-22 16:01:53
【问题描述】:

可能重复:
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

【问题讨论】:

  • 问题是,如何将十进制日期(12-13 个字符长)转换为日期格式。在示例中,年份也移到日期的前面。
  • 请注意,尝试将数字字段直接转换为日期字段将导致意外值 - DB2 将数字输入视为 天数 (-1),因为0001-01-01

标签: sql database datetime db2


【解决方案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

使用这种在数据库中编码日期的方式很糟糕,让该功能始终可用应该证明是无价的。

【讨论】:

  • 那是完美的。你说的对。谢谢你。唯一的问题是我只有选择访问权限。我无法在数据库中创建函数。还有办法选择你的代码吗?
  • @user719825:试试这个:WHERE date (substr(digits(DECIMALCOLUMN),4,4) || '-' || substr(digits(DECIMALCOLUMN),1,2) || '-' || substr(digits(DECIMALCOLUMN),3,2)) = @date。很糟糕,但在功能上是等效的。如果有任何问题,请尝试显示表达式和decimalcolumn,看看可能有什么问题。
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2022-09-29
相关资源
最近更新 更多