none
sql 按照日期查询 RRS feed

  • 问题

  • 我在数据库中做了一张表Table1
    里面只有一个字段 time
    然后我插入了几个日期 ,如下:
    2012-02-24 16:10:20.000
    2012-01-04 12:05:04.000
    2012-01-02 21:05:06.000
    2012-02-02 11:05:06.000


    我写了一个查询语句:
    select * from Table1 where time like '%2012-02-24%'


    为什么没有结果输出??


    如果我写成
    select * from Table1 where time like '%2012%' 那么又会显示结果,我怎么才能只查询到2012-02-24这一天啊??
    2012年2月28日 8:38

答案

  • 您把日期型别跟字串型别搞混了哦!要先把日期轉成字串哦!

    DECLARE @Table1 TABLE
    (
    ID INT IDENTITY(1,1) 
    , [time] DATETIME
    );
    
    INSERT @Table1
            (  [time] )
    VALUES  ( '2012-02-24 16:10:20.000' ),
    ( '2012-01-04 12:05:04.000' ),
    ( '2012-01-02 21:05:06.000' ),
    ( '2012-02-02 11:05:06.000' )
    
    --您把日期型别跟字串型别搞混了哦!
    SELECT * FROM @Table1
    WHERE CONVERT(VARCHAR, [time], 121) like '%2012-02-24%'

    要找日期的話,也可用樓上的 >= <= 或用between哦!

    http://www.dotblogs.com.tw/rainmaker/archive/2012/01/05/64456.aspx



    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年2月28日 9:03

全部回复

  • time是什么类型?

    试试

    select * from Table1 where time >= '2012-02-24'  and time < '2012-02-25'


    http://feiyun0112.cnblogs.com/


    2012年2月28日 8:56
    版主
  • 您把日期型别跟字串型别搞混了哦!要先把日期轉成字串哦!

    DECLARE @Table1 TABLE
    (
    ID INT IDENTITY(1,1) 
    , [time] DATETIME
    );
    
    INSERT @Table1
            (  [time] )
    VALUES  ( '2012-02-24 16:10:20.000' ),
    ( '2012-01-04 12:05:04.000' ),
    ( '2012-01-02 21:05:06.000' ),
    ( '2012-02-02 11:05:06.000' )
    
    --您把日期型别跟字串型别搞混了哦!
    SELECT * FROM @Table1
    WHERE CONVERT(VARCHAR, [time], 121) like '%2012-02-24%'

    要找日期的話,也可用樓上的 >= <= 或用between哦!

    http://www.dotblogs.com.tw/rainmaker/archive/2012/01/05/64456.aspx



    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年2月28日 9:03
  • 先来解释一下。为什么第一句不出结果,而第二句可以,

    select * from Table1 where time like '%2012-02-24%'

    上面那个SQL执行的时候,Table1 中的time会执行CONVERT(VARCHAR(40),time)转化,结果被转化为 Feb 24 2012  4:10PM

    这样可以解释你 为什么select * from Table1 where time like '%2012-02-24%' 不能显示 ,

    而select * from Table1 where time like '%2012%' 却又可以了。

    正确的方法是用 select  * from dbo.Table1 where datediff(day,'2012-02-24',time ) =0


    当然,乱码客的”SELECT * FROM @Table1 WHERE CONVERT(VARCHAR, [time], 121) like '%2012-02-24%'“ 也是OK的
    2012年2月28日 9:12
  • 你把日期的那个字段给弄成日期型的,select * from Table1 where time like #2012-02-24#试下....
    2012年2月28日 15:08
  • 菜菜菜菜菜鸟 您好,您這是Access 的用法哦!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月28日 15:35
  • CONVERT(VARCHAR, [time], 121)请问121是什么意思啊??
    2012年2月29日 12:12