我写了以下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
答案 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)
问题实际上是字符串字段类型 您有两种选择:
答案 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表中的日期...