【问题标题】:I have a date/time stamp field, where I need to pull records just by date我有一个日期/时间戳字段,我需要按日期提取记录
【发布时间】:2017-02-27 16:16:53
【问题描述】:

我有一个日期/时间戳字段,我需要按日期提取记录。

示例:所有数据记录都是 >= '01/01/2016'。

字段中的数据以以下格式存储 '9/5/2012 7:34:59 AM'

我尝试了以下方法,但我得到了错误或错误的结果:

  • where to_char(start_time) > '01/01/2016'(仍然给出 2012 年的记录)
  • where trunc(start_time) > '01/01/2016'(错误:不是有效月份)

【问题讨论】:

  • to_char 和 trunc 来自 Oracle...您确定您使用的是 MySQL?
  • 您的日期/时间戳字段是DATETIMESTAMP 数据类型,还是VARCHAR2NUMBER?最好的了解方法是运行DESCRIBE 命令:DESCRIBE <table_name>。这将为您提供表中所有列的名称和数据类型。

标签: sql oracle datetime


【解决方案1】:

在mysql中你应该使用

这是字符串规范格式

select * from my_table 
where start_time > '2016/01/01'  

或使用正确的格式通过 str_to_date 进行转换

select * from my_table 
where start_time > str_to_date('01/01/2016', '%d/%m/%Y')

【讨论】:

    【解决方案2】:

    使用to_date 将字符串转换为日期,然后进行比较。

    试试这个:

    where start_time >= to_date('01/01/2016', 'dd/mm/yyyy');
    

    【讨论】:

    • 谢谢!这行得通。我能够得到我需要的数据。
    【解决方案3】:

    在 Oracle(可能还有其他数据库产品)中,您可以使用 ANSI 日期文字,如下所示。您也可以使用to_date(),但ANSI 日期文字的好处是它不需要函数调用。 (函数调用是消耗时间和资源的开销,尽管只调用一次to_date() 不是问题。)

    ... where start_time >= date '2016-01-01'
    

    请注意,在 ANSI 标准日期文字中,日期 必须 采用精确的格式 YYYY-MM-DD(使用破折号而不是斜线或任何其他分隔符),因为 ANSI 日期文字采用格式模型吗。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2018-02-07
      • 2016-12-30
      • 1970-01-01
      • 2014-03-25
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多