【问题标题】:MySql query displays wrong time, but date is rightMySql查询显示错误的时间,但日期是正确的
【发布时间】:2014-03-10 15:51:54
【问题描述】:

经过长时间的搜索,我找到了我正在寻找的脚本。工作正常。但有一个方面是错误的: 日期和时间。 通常我应该收到

5   2014-02-24 14:59:28     7   NULL    
5   2014-02-24 15:32:55     6   -1  
5   2014-03-08 10:32:19     60  54  
5   2014-03-08 10:40:23     20  -40     
5   2014-03-08 10:44:22     21  1   
5   2014-03-08 15:05:54     2   -19     
5   2014-03-08 15:06:10     25  23  

但我得到了:

5   2014-02-24 02:59:28     7   NULL    NULL
5   2014-02-24 03:32:55     6   -1  -14.2857%
5   2014-03-08 03:05:54     2   -19     -90.4762%
5   2014-03-08 03:06:10     25  23  1150.0000%
5   2014-03-08 10:32:19     60  54  900.0000%
5   2014-03-08 10:40:23     20  -40     -66.6667%
5   2014-03-08 10:44:22     21  1   5.0000%

这只是 stock_id 5 的示例。其他人也对时间有误。 我的代码如下:

select stock_id,date_format(date,'%Y-%m-%d %h:%i:%s') as date
, price,pxchange,concat(round(pxpct*100,4),'%') pxpct
from (select 
     case when stock_id <> @pxticker then 
         @pxclose := null end,
    p.*,
    (price-@pxclose) as pxchange,
    (price-@pxclose)/@pxclose as pxpct,
    (@pxclose := price),
    (@pxticker := stock_id)
  from quotations p
  cross join
  (  select 
     @pxclose := null,
     @pxticker := stock_id
     from quotations 
     order by stock_id, date limit 1)  as a
  order by stock_id, date ) as b
order by stock_id, date asc

但是出了什么问题?我加了 (date,'%Y-%m-%d %h:%i:%s') 对吧?有人知道问题出在哪里吗?


编辑 - 附加问题和代码

SELECT 
stock_id, stocks.name,
date_format( date, '%Y-%m-%d %H:%i:%s' ) AS date, 
price, 
pxchange, 
concat( round( pxpct *100, 4 ) , '%' ) pxpct, 
stocks.stockmarket, 
stockmarkets.id

FROM (
SELECT
CASE WHEN stock_id <> @pxticker
THEN @pxclose := NULL
END , p . * , 
(price - @pxclose) AS pxchange, 
(price - @pxclose) / @pxclose AS pxpct, 
(@pxclose := price), 
(@pxticker := stock_id)

FROM quotations p

CROSS JOIN 
(
SELECT @pxclose := NULL , @pxticker := stock_id
FROM quotations
ORDER BY stock_id, date
LIMIT 1
) AS a
ORDER BY stock_id, date
) AS b 

LEFT JOIN 
stocks ON stock_id = stocks.id
LEFT JOIN
stockmarkets ON stockmarkets.id = stocks.stockmarket 
WHERE stocks.stockmarket = (SELECT id FROM stockmarkets WHERE short ='NASDAQ')
GROUP BY stock_id
ORDER BY stock_id, MIN(date) ASC

【问题讨论】:

    标签: mysql date time


    【解决方案1】:

    日期函数需要一个大写的 H 以使您的输出采用 24 小时格式,否则它将输出 AM/PM 日期,不带 AM/PM 符号(即仅从 0-11 小时)。

    【讨论】:

    • 谢谢,@Emir。等待时间结束后,我给你的评价是积极的。令人难以置信的是一封信的重要性。
    • 是的,这件事几周前也把我搞砸了。如果日期错误,则无法按时间排序!
    • @Emir 或其他任何人:你知道为什么我没有得到最年轻的条目吗?我在编辑会话中添加了代码并在 PHPmyAdmin 中进行了尝试,但我仍然得到了最旧的条目。还尝试了 max(date) asc 和 max(date) desc 和 min(date) asc/desc。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多