形如
2008-6-6  12:00
2008-6-11 22:00
2008-6-9  10:00
2008-6-8 1:00数据表中的这些时间是字符型的,怎么比较大小啊?
最主要,我是想取出
2008-6-5  与  2008-6-10 之间的数据。
怎么解决这个问题?请高手帮帮忙吧?我是菜鸟!

解决方案 »

  1.   

    假设格式固定
    SELECT CAST(
    LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1)
    AS DATE)
    select * from tt where cast(left(f1,instr(f1,' ')-1) as date)  between '2008-6-5' and '2008-6-10'
      

  2.   

    SELECT CAST( 
    LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1) 
    AS DATE) 
    这句是什么意思啊?哪里来的'2008-6-16  12:00'呢?解释一下吧,还是不太敢用!
      

  3.   

    SELECT CAST( 
    LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1) 
    AS DATE)将字符型-》日期型 
    一个示例,你自己测试一下,没有 问题
      

  4.   

    另外,我的数据库是PostgreSQL~~~
      

  5.   


    谢谢啊!可是我这里怎么还是有问题呢?
    我是直接将你给的东西复制过去后,运行得到一下结果。ERROR: syntax error at or near "select"
    我试着在SELECT CAST(
    LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1)
    AS DATE)后面加了个分号。运行后得到ERROR: function instr("unknown", "unknown") does not exist
    SQL 状态: 42883
    建议:No function matches the given name and argument types. You may need to add explicit type casts.
    字符:40
    这又是怎么回事呢?
    我真的搞不懂了,请详细解释下吧!谢谢了!
      

  6.   

    mysql> SELECT CAST(
        -> LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1)
        -> AS DATE);
    +-----------------------------------------------------------------------------+
    | CAST(
    LEFT('2008-6-16  12:00',INSTR('2008-6-16  12:00',' ')-1)
    AS DATE)     |
    +-----------------------------------------------------------------------------+
    | 2008-06-16                                                                  |+-----------------------------------------------------------------------------+
    1 row in set (0.00 sec)mysql>没有 问题嘛
      

  7.   


    是不是因为PostgreSQL中的不一样啊!还是没解决掉!不过谢谢啊!
      

  8.   

    csdn=# select * from t;
           col
    -----------------
     2008-6-6 12:00
     2008-6-11 22:00
     2008-6-9 10:00
     2008-6-8 1:00
    (4 rows)
    csdn=# select *
    csdn-# from t
    csdn-# where to_date(col, 'YYYY-MM-DD HH24:MI') between '2008-06-05' and '2008-0
    6-10';
          col
    ----------------
     2008-6-6 12:00
     2008-6-9 10:00
     2008-6-8 1:00
    (3 rows)
    csdn=#
      

  9.   

    SELECT STR_TO_DATE('2008-6-11 22:00', '%Y-%m-%d');