MYSQL中有一个字段为timestamp  值 为:2009-02-15 22:22:25
我现在想比较一个大小 介于2009-02-10  与 2009-02-17 之间的记录
怎么我查询 substring(字段,1,10) <= '2009-02-17' and substring(字段,1,10)>='2009-02-10'
不行呀?请问一下MYSQL这种类型字段是怎么比较大小的呀?

解决方案 »

  1.   

    SELECT * FROM TABLE1 WHERE DATE(COL1) BETWEEN '2009-02-17' AND '2009-02-10' 
      

  2.   


    你这么做之所以不行,是因为你substring(字段,1,10)转换成了字符串,而不是时间。当然,从字符串的角度讲,比较起来是有大小的,substring(2009-02-15 22:22:25,1,10)还是小于'2009-02-17' 的。
    你可以直接比较的:
    SELECT * FROM TABLE1 WHERE COL1 BETWEEN '2009-02-17' AND '2009-02-10' ,这样系统会转换
    '2009-02-17' 为'2009-02-17 00:00:00.0'。没有必要再做其他的处理的。当然用DATA(COL1)无疑是一种很专业的处理发方法。建议你还是用DATA()函数来处理,去到精确到“日”的时间格式再比较。
     
      

  3.   

    MySQL语言参考:
    When you compare a DATE, TIME, DATETIME, or TIMESTAMP to a constant string with the <, <=, =, >=, >, or BETWEEN operators, MySQL normally converts the string to an internal long integer for faster comparison.
    ----------------------------------------------------------------------------------------------
    当把DATE, TIME, DATETIME, 或TIMESTAMP类型与一个字符串常量比较,并使用<, <=, =, >=, >, 或 BETWEEN 操作符时,MySQL自动把字符串转换为内部long integer,以期快速比较。例:
    mysql> SELECT * FROM tbl_name WHERE date >= '2003-05-05';