如何在SQL to_date中设置AM / PM?

时间:2015-07-20 14:01:40

标签: sql oracle date

我想在两个日期之间对查询结果进行排序。如何设置定义AM / PM的日期?

具体日期采用YYYY-mm-dd hh:mi格式。

AND (cr.COMPLETED_DATE BETWEEN TO_DATE( :Start_Date , 'YYYY-mm-dd hh:mi') AND TO_DATE( :End_Date , 'YYYY-mm-dd hh:mi'))

我尝试输入大于12的数字(军事时间),但我收到此错误java.sql.SQLException: ORA-01849: hour must be between 1 and 12

有没有办法用YYYY-mm-dd hh:mi日期格式指定上午/下午?

2 个答案:

答案 0 :(得分:4)

请注意在日期格式规范中添加了24。这将允许您输入24小时时间:

AND (cr.COMPLETED_DATE BETWEEN TO_DATE( :Start_Date , 'YYYY-mm-dd hh24:mi') AND TO_DATE( :End_Date , 'YYYY-mm-dd hh24:mi'))

或者你也可以在这行中使用am / pm指示符:

AND (cr.COMPLETED_DATE BETWEEN TO_DATE( :Start_Date , 'YYYY-mm-dd hh:mi am') AND TO_DATE( :End_Date , 'YYYY-mm-dd hh:mi am'))

这是一种尝试检测要使用的两种格式中的哪种格式的方法。如果它在字符串中找到AM或PM,它将采用AM / PM指定,否则它将指示24小时表示法:

CASE
  WHEN regexp_like( :START_DATE, '((AM)|(PM))','i') 
    THEN to_date(:START_DATE,'yyyy-mm-dd hh:mi am')
  ELSE to_date(:START_DATE,'yyyy-mm-dd hh24:mi')
END

答案 1 :(得分:2)

不确定您或其他任何人是否有兴趣在MySQL中执行此操作,但如果您想:

AND (cr.COMPLETED_DATE BETWEEN DATE_FORMAT( :Start_Date, '%Y-%m-%d %h:%i %p' )
                           AND DATE_FORMAT( :End_Date, '%Y-%m-%d %h:%i %p')