我有一个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
我明白了:您想要某种重新排列数字的位数以使其成为日期的方式。看起来像是编码[m]mddyyyy。(为什么date数据库中没有该数据类型?)
[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并转换为日期。(我以此为基础。)
yyyy-mm- dd
因此,解决原始问题的方法就是编写:
SELECT * FROM table1 WHERE decimaldate(DECIMALCOLUMN) = @date
通过这种在数据库中编码日期的简便方法,拥有始终可用的功能将被证明是无价的。