从mysql中检索SELECT语句中的日期

时间:2012-04-01 01:14:36

标签: mysql

我写了以下mysql代码:

select trade_dt, 
       ticker_id, 
       settle_price, 
       volume 
from hist 
where volume > 0 and trade_dt between '06/22/2011' and '06/30/2011';

但不幸的是,它会在时间窗口之外返回日期,如下所示:

+------------+------------+--------------+--------+
| trade_dt   | ticker_id  | settle_price | volume |
+------------+------------+--------------+--------+
| 06/23/2006 | N (Jul 06) |   156.900000 |     90 |
| 06/26/2006 | N (Jul 06) |   155.600000 |     63 |
| 06/27/2006 | N (Jul 06) |   159.300000 |     79 |
| 06/28/2006 | N (Jul 06) |   159.600000 |     57 |
| 06/29/2006 | N (Jul 06) |   143.400000 |    511 |
| 06/30/2006 | N (Jul 06) |   140.200000 |    342 |
| 06/23/2005 | V (Oct 05) |   151.200000 |     61 |
| 06/23/2011 | U (Sep 11) |    22.500000 |   6284 |
| 06/24/2011 | U (Sep 11) |    23.100000 |   4505 |
| 06/27/2011 | U (Sep 11) |    22.650000 |   3118 |
| 06/28/2011 | U (Sep 11) |    22.100000 |   3707 |
| 06/29/2011 | U (Sep 11) |    21.500000 |   5830 |
| 06/30/2011 | U (Sep 11) |    20.750000 |   9207 |
| 06/23/2008 | F (Jan 09) |    23.260000 |      2 |

我想知道是不是因为我的trade_dt被定义为hist table.EDITED表中的一个字符串,用于将char(10)替换为日期

desc hist;
+-----------------+---------------+------+-----+---------+----------------+
| Field           | Type          | Null | Key | Default | Extra          |
+-----------------+---------------+------+-----+---------+----------------+
| futures_id      | int(11)       | NO   | PRI | NULL    | auto_increment |
| trade_dt        | date          | NO   |     | NULL    |                |
| ticker_id       | varchar(46)   | NO   | MUL | NULL    |                |
| settle_price    | decimal(10,6) | NO   |     | NULL    |                |
| change_in_price | decimal(10,6) | NO   |     | NULL    |                |
| volume          | bigint(11)    | NO   |     | NULL    |                |
| open_int        | bigint(11)    | NO   |     | NULL    |                |
+-----------------+---------------+------+-----+---------+----------------+

如何解决日期问题?

好的,我将trade_dt字段更改为date而不是char(10),现在当我运行以下语句将数据加载到数据库中时,它会为日期插入空白,只是因为如何在数据文件中格式化日期。

LOAD DATA LOCAL INFILE '$fn' INTO TABLE $tn FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (trade_dt,ticker_id,settle_price,change_in_price, volume, open_int);

这是原始数据的示例:

03/30/2012,Z (Dec 12),25.81,25.81,25.50,25.70,25.60,-0.45,24,0,318

4 个答案:

答案 0 :(得分:1)

正如您所说,这是因为数据类型是字符串。您可以通过将列转换为查询中的日期类型来获得正确的结果,但这非常低效。唯一合理的解决方法是在表定义中更改trade_dt列的类型。

答案 1 :(得分:0)

select trade_dt, ticker_id, settle_price, volume from 
hist where volume > 0 and trade_dt between '2011-06-22' and '2011-06-30';

MySQL以'YYYY-MM-DD'格式检索并显示DATE值。

答案 2 :(得分:0)

问题实际上是字符串字段类型 您有两种选择:

  • 更改字段至日期(首选)
  • 以“YYYY / MM / DD”格式存储字符串日期

答案 3 :(得分:0)

在保存数据的同时,你得到日期为dd / mm / yyyy只是爆炸日期并保存为sql接受的正确格式(YYYY-MM-DD);

  $date = '26/07/2001';

   $data= explode("/",$date);

    $dateField = $data[2]."-".$data[1]."-".$data[0];

将此$dateField保存为sql表中的日期...