2011-01-31 48 views
6

我正在首次使用DB2数据库。将字符串转换为DB2中的日期

我正在尝试使用DB2日期,但数据作为字符串存储在DB2数据库中。

我想这个日期字符串转换为实际日期,最好脱落的时间,因为我希望所有交易1月1日和2011年26月之间的2011

所以基本上,我想在这个DB2 MS SQL语句魔术......

CONVERT(datetime,SETTLEMENTDATE.VALUE,103) 

有关背景,我已经尽可能

CAST(SETTLEMENTDATE.VALUE, DATE) 

0123了
DATE(SETTLEMENTDATE.VALUE) 

但是我需要DB2专家的专业知识!

谢谢

+0

我希望我们的日期在我们的DB2中是字符串......它们是整数!还有6个数字日期(YYMMDD)(和8个数字日期(YYYYMMDD) - 解决Y2K问题!)...所以在6个数字日期中,值111真的是2000年1月11日...谈论凌乱转换! – Leslie 2011-01-31 15:39:41

+0

@蕾丝莉...我会交换你的! :) – Fenton 2011-01-31 15:43:59

+0

你能从SETTLEMENTDATE.VALUE列发布示例数据吗? – 2011-01-31 16:37:03

回答

14

根据你自己的答案,我猜你的列有数据格式如下:

'DD/MM/YYYY HH:MI:SS' 

日/月/年之间的实际分离并不重要,也没有任何东西后到来那一年。

你不说你使用的是什么版本的DB2,或者运行在哪个平台上,所以我会假设它在Linux,UNIX或Windows上。

select 
    date(translate('GHIJ-DE-AB',column_with_date,'ABCDEFGHIJ')) 
from 
    yourtable 

有了这个解决方案也没有:

几乎所有最新的DB2用于Linux/UNIX/Windows的(或者8.2以后,甚至可能是旧版本)版本,则可以使用TRANSLATE功能做到这一点重要的是你的专栏中日期之后的内容。

在DB2 9.7中,你还可以使用TO_DATE功能(类似于Oracle的TO_DATE):

date(to_date(column_with_date,'DD-MM-YYYY HH:MI:SS')) 

这需要你的数据格式化字符串匹配;在查看时更容易理解,但不像TRANSLATE选项那样灵活。

0

好吧,似乎有点破解。我有它使用字符串,因此只有日期(无时间)的字符串的一部分被传递到DATE函数工作...

DATE(substr(SETTLEMENTDATE.VALUE,7,4)||'-'|| substr(SETTLEMENTDATE.VALUE,4,2)||'-'|| substr(SETTLEMENTDATE.VALUE,1,2)) 

我还是会接受任何答案比这个更好!

+0

虽然这种做事做法很冒险,但请参阅Ian Bjorhovde的回答,我已经在上面接受了! – Fenton 2011-01-31 19:27:55

-3

您可以使用:

select VARCHAR_FORMAT(creationdate, 'MM/DD/YYYY') from table name 
4

我知道它的旧帖子,但我仍想贡献
如果你有这样的
'YYYMMDD'

例如数据格式以上将无法正常工作:

Dt 
20151104 

因此,我试图追踪以获得所需的结果。

select cast(Left('20151104', 4)||'-'||substring('20151104',5,2)||'-'||substring('20151104', 7,2) as date) from SYSIBM.SYSDUMMY1; 

此外, 如果你想运行从MS SQL查询链接服务器到DB2(仅显示100行)。上述查询后

SELECT top 100 * from OPENQUERY([Linked_Server_Name], 
    'select cast(Left(''20151104'', 4)||''-''||substring(''20151104'',5,2)||''-''||substring(''20151104'', 7,2) as date) AS Dt 
    FROM SYSIBM.SYSDUMMY1') 

结果:

Dt 
2015-11-04 

希望这有助于他人。