将字符串转换为DB2中的日期

Fen*_*ton 7 db2 casting date

我是第一次使用DB2数据库.

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

我想将这个日期字符串转换为实际日期,最好是下降时间因为我想要2011年1月1日到2011年1月26日之间的所有交易.

基本上,我想在DB2魔术中使用这个MS SQL语句......

CONVERT(datetime,SETTLEMENTDATE.VALUE,103)
Run Code Online (Sandbox Code Playgroud)

对于背景,我已经到了

CAST(SETTLEMENTDATE.VALUE, DATE)
Run Code Online (Sandbox Code Playgroud)

DATE(SETTLEMENTDATE.VALUE)
Run Code Online (Sandbox Code Playgroud)

但我需要DB2 whizzkid的专业知识!

谢谢

Ian*_*vde 21

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

'DD/MM/YYYY HH:MI:SS'
Run Code Online (Sandbox Code Playgroud)

日/月/年之间的实际分隔符无关紧要,也不会在年后发生任何事情.

您没有说明您正在使用的DB2版本或正在运行的平台,因此我将假设它在Linux,UNIX或Windows上.

几乎任何最新版本的DB2 for Linux/UNIX/Windows(8.2或更高版本,甚至可能是旧版本),都可以使用以下TRANSLATE函数执行此操作:

select 
   date(translate('GHIJ-DE-AB',column_with_date,'ABCDEFGHIJ'))
from
   yourtable
Run Code Online (Sandbox Code Playgroud)

使用此解决方案,您的专栏中的日期之后的内容无关紧要.

在DB2 9.7中,您还可以使用该TO_DATE函数(类似于Oracle的TO_DATE):

date(to_date(column_with_date,'DD-MM-YYYY HH:MI:SS'))
Run Code Online (Sandbox Code Playgroud)

这要求您的数据与格式字符串匹配; 在查看它时更容易理解,但不像TRANSLATE选项那样灵活.


Den*_*enn 6

我知道它的旧帖子,但我仍然想要贡献
如果你有这样的数据格式,上面将无法工作
'YYYMMDD'

例如:

Dt
20151104
Run Code Online (Sandbox Code Playgroud)

所以我试着跟随以获得理想的结果.

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

此外,如果要将查询从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')
Run Code Online (Sandbox Code Playgroud)

上述查询后的结果:

Dt
2015-11-04
Run Code Online (Sandbox Code Playgroud)

希望这对其他人有帮助.