如何从提供者IBMDA400将字符串ddmmyyyy转换为日期时间格式(DD / MM / YYYY)

时间:2015-03-09 03:58:22

标签: sql datetime oledb

当我尝试将数据从列名称转换为'date'(string: ddmmyyyy ex:09032015)到fomat datetime(DD / MM / YYYY)并且我正在使用提供程序 IBMDA400 时,我遇到了问题。

我使用一些命令尝试转换,但没有成功。

我的目的只是从数据库中选择数据,但Visual Studio始终显示错误。

例如:

Cmd1: select date(to_date(my string,'dd/mm/yyyy') from table

- > 此处出现错误:SQ20448: Expression not valid using format string specified for TIMESTAMP_FORMAT.

我改变了:'TIMESTAMP_FORMAT'而不是'TO_DATE' cmd2:select TIMESTAMP_FORMAT(mystring, 'DD/MM/RRRR HH24:MI')
- > 错误SQ20448继续出现。

1 个答案:

答案 0 :(得分:0)

您已在下面的评论中指出,有3个字符串字段(日,月和年),并且您将它们连接起来,使它们看起来像09032015

而是以ISO标准方式连接,然后转换为日期。

对于DB2,我会尝试这个:

to_date( ( CONCAT z CONCAT '-' CONCAT Y CONCAT '-' CONCAT X) , 'YYYY-MM-DD' )

其中

  • Z =年份字符串
  • Y =月份字符串
  • x =日期字符串

如果您有约会,可以将其重新格式化为您喜欢的任何所需样式。

请注意,日期数据类型不以任何特定格式存储。


以下内容是在假设dbms为Oracle的情况下编写的。

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE TABLE1
    (X date, Y timestamp, Z varchar2(60))
;

INSERT ALL 
    INTO TABLE1 (X,Y,Z)
         VALUES (to_date('09032015','ddmmyyyy'), to_timestamp('09032015','ddmmyyyy'), '09032015')
SELECT * FROM dual
;

查询1

SELECT
  TO_CHAR(X, 'DD/MM/YYYY') 
, TO_CHAR(Y, 'DD/MM/YYYY')
, substr(Z,1,2) || '/' || substr(Z,3,2)  || '/' || substr(Z,5,4) 
FROM TABLE1

<强> Results

| TO_CHAR(X,'DD/MM/YYYY') | TO_CHAR(Y,'DD/MM/YYYY') | SUBSTR(Z,1,2)||'/'||SUBSTR(Z,3,2)||'/'||SUBSTR(Z,5,4) |
|-------------------------|-------------------------|-------------------------------------------------------|
|              09/03/2015 |              09/03/2015 |                                            09/03/2015 |