db2 datetime转换为日期问题

时间:2013-09-27 20:20:33

标签: db2

我的日期栏格式如下:
20120714042548334
20120714042548334
20120714042549375个

尝试查询某个范围的表,我收到一条错误,上面写着“日期时间值的字符串表示的语法不正确.SQLSTATE = 22007”,立即出错或显示几千条记录后。 我正在使用的查询是

select * from AUDIT
where date(substr(serv_start_date_time,1,4)||'-' ||substr(serv_start_date_time,5,2) ||'-'||
substr(serv_start_date_time,7,2)) between date('9/4/2012') and date('9/10/2012')

任何帮助或帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您是否尝试过将日期范围设为ISO格式:

select * from AUDIT
where date( substr(serv_start_date_time,1,4) ||'-'
          ||substr(serv_start_date_time,5,2) ||'-'
          ||substr(serv_start_date_time,7,2)
          ) between date('2012-09-04') and date('2012-09-10')

或者更快,通过避免类型转换,坚持字符比较,因为它似乎是您的数据列的开头。

select * from AUDIT
where serv_start_date_time between '20120904' and '20120910'

答案 1 :(得分:0)

正则表达式:

如果您可以提供有关如何访问它的更多详细信息,那将有所帮助。 我通过ruby访问SQL - 不同的情况,但知道你可以使用哪些工具会有所帮助。

如果你可以使用正则表达式, /([\ d] {4})([\ d] {2})([\ d] {2})[\ d] {9} /将返回: 2012 07 04 对于 20120714042548334

查询建议:

另外,如果列是Date,

的影响
SELECT Date FROM AUDIT WHERE Date>=20120714000000000 AND Date<20120824000000000

例如,应该在7月14日到8月23日之间取出所有内容。

在你的9/4到9/10,它会是:

SELECT Date FROM AUDIT WHERE Date>=20120904000000000 AND Date<20120911000000000

希望有所帮助。