从两个时间戳之间选择日期

时间:2015-12-04 15:24:57

标签: sql oracle date-arithmetic

我面临以下问题。 我有一个数据库,其中有一个表可以保存日期(及时)。

现在我想知道两个时间戳之间日期的所有表信息,但是我收到以下错误: 01830. 00000 - “日期格式图片在转换整个输入字符串之前结束”。

到目前为止我所做的是这个查询:

import java.awt.event.MouseListener;
import javax.swing.JOptionPane;
import java.awt.event.*;
/**
 *
 * 
 * @author Christopher Porras
 * @Version 0.1
 * @Doing GUI
 */
public class Button extends JFrame {

   private JButton bred;
   private JButton bblue;
   private JButton bgreen;
   private JPanel mousepanel; 


    public Button()
    {
        super("ChangeColor");
        setLayout(new FlowLayout());
        setSize(200,200);

        mousepanel = new JPanel();
        mousepanel.setBackground(Color.white);
        add(mousepanel);

        bred = new JButton("REd");
        add(bred);

        bblue = new JButton("Blue");
        add(bblue);

        bgreen = new JButton("Green");
        add(bgreen);

        thehandler handler = new thehandler();
        bred.addMouseListener(handler);
        bblue.addMouseListener(handler);
        bgreen.addMouseListener(handler);
    }

    private class thehandler implements MouseListener
    {


        public void mouseClicked(MouseEvent e)
        {
            if(e.getSource()==bred)
            {
                mousepanel.setBackground(Color.red);
            }

             else if(e.getSource()==bblue)
            {
                mousepanel.setBackground(Color.blue);
            }

             else if(e.getSource()==bgreen)
            {
                mousepanel.setBackground(Color.green);
            }
        }


        public void mousePressed(MouseEvent e) {

        }

        public void mouseReleased(MouseEvent e) {

        }


        public void mouseEntered(MouseEvent e) {

        }


        public void mouseExited(MouseEvent e) {
              //To change body of generated methods, choose Tools | Templates.
        }



    }

    public static void main(String[]args)
    {
        Button button = new Button();
        button.setVisible(true);
        button.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

这不会给我任何结果,但应该有:

SELECT * FROM ARBEITSBLOCK WHERE STARTZEIT BETWEEN '30.11.2015 19:00:00' 
                                              and  '01.12.2015 19:05:00'; 

3 个答案:

答案 0 :(得分:3)

尝试此语句(使用Oracle语法)

SELECT *
FROM   ARBEITSBLOCK 
WHERE  STARTZEIT BETWEEN TO_DATE ('12/04/2015 09:00:00 AM', 'mm/dd/yyyy hh:mi:ss AM')
                     AND TO_DATE ('12/04/2015 10:00:00 AM', 'mm/dd/yyyy hh:mi:ss AM');

答案 1 :(得分:1)

如果STARTZEIT是DATE列,那么为什么要将它与字符串进行比较?

通过这样做,你依靠甲骨文可以说"啊哈!这个字符串真的是一个日期,所以我会尝试为你转换它!"。这一切都很好,但Oracle如何知道如何格式化字符串中的日期?

嗯,有nls_date_format参数默认为“DD-MON-RR'”,我想您现在可以看到为什么要获得" date格式图片在转换整个输入字符串之前结束"错误,因为' DD-MON-RR'比2015年11月30日19:00:00'。

短得多

您应该明确地将字符串转换为日期,而不是依赖于此隐式转换以及与之一致的错误(您已经发现!),您可以使用{{1功能。

例如:

to_date()

答案 2 :(得分:0)

Oracle不会以您看到的格式 存储日期。它在内部存储在7 bytes中,每个字节存储日期时间值的不同组件。

您必须使用 TO_DATE 并使用正确的 FORMAT MODEL 将文字明确转换为 DATE

SELECT * 
FROM   ARBEITSBLOCK 
WHERE  STARTZEIT BETWEEN 
      TO_DATE('30.11.2015 19:00:00', 'DD.MM.YYYY HH24:MI:SS') 
AND 
      TO_DATE('01.12.2015 19:05:00', 'DD.MM.YYYY HH24:MI:SS'); 

请注意,DATE 数据类型包含日期和时间元素, TIMESTAMP 扩展到{{1} } 数据类型