2013-06-03 117 views
0

我遇到了“按日期排序”的问题。我有一个访问我们的数据库的PHP页面。我有一个函数将显示我们的数据在一个表中。 SQL语句如下:按日期时间排序的PHP/SQL顺序。按年份排序不是月份mm/dd/yyyy

SELECT date_time 
, pass_no 
, location2 
from usr_vftcapstone_0.vftPasses as P, Scans as S 
where P.user_name='terak' and S.details2=P.`pass_no` order by S.date_time; 

我做了“加盟”,使我能得到所有的涉及用户的数据。 用户有一个通行证列表。那些通行证有location2。我试图从分配给用户的所有通行证中获取所有“location2”条目。

我曾尝试:

order by convert(datetime, date_time, 103) ASC 

style 103 = dd/MM/yyyy (msdn) 

对于这一点,我不知道在哪里包括“作风103”我在同一个sql语句中的“ASC”后尝试过,但我不认为它是如何工作的。

我的输出按降序排列,但按月排序。我需要它在今年订购。
date_time字段显示如下:1/01/2013 10:30:51

对此的任何帮助将不胜感激。谢谢大家。

回答

0

只需通过date_time字段进行排序即可。只能转换为字符串才能显示。

+0

我认为它被保存为一个字符串。或varChar。有'datetime'数据类型,是吗?有时它存储在你的分贝? –

+0

当我按日期时间订购时,它使用月份而不是年份。毫米/日/年。 –

0

尝试:

ORDER BY STR_TO_DATE(date_time, '%d/%m/%Y %H:%i:%s') 

样式数字是SQL Server中,但是您的查询看起来像MySQL。

如果您的日期,可以在不同的格式(什么样搞砸了数据库的是什么?),你可以这样做:

ORDER BY CASE WHEN date_time LIKE '%/%/% %:%:%' 
        THEN STR_TO_DATE(date_time, '%d/%m/%Y %H:%i:%s') 
       WHEN date_time LIKE '%/%/% %:%' 
        THEN STR_TO_DATE(date_time, '%d/%m/%Y %H:%i') 
     END 
+0

该死的只是错过了一分钟:) – Yogus

+0

我喜欢这个样子。似乎它应该工作。但它仍然以疯狂的顺序显示。 –

+0

我喜欢这样的外观。似乎它应该工作,但它不是。仍然以疯狂的顺序显示。现在看看我的输出。我的一些日期时间有mm/dd/yyyy hh:mm,有的有mm/dd/yyyy HH:MM:SS它看起来像是4/14/2013 HH:MM,并且到3/24/13然后是2/23/13,然后一旦到达2013年1月18日它显示不同的dateTime HHMMSS,但它仍然会在2013年1月后2013年(由于1 vs 12)仍然按月排序,它看起来像。 你是什么风格的数字,我需要管理%d%m等? –

0

你可以尝试用此

SELECT date_time 
, pass_no 
, location2 
from usr_vftcapstone_0.vftPasses as P, Scans as S 
where P.user_name='terak' and S.details2=P.`pass_no` 
order by SUBSTRING(S.date_time,7,4) ASC 

我从here

SUBSTRING (expression ,start , length) 

也用它试试这个

我已经使用使用DATEPART (Transact-SQL)来提取年份。

SELECT date_time 
    , pass_no 
    , location2 
    from usr_vftcapstone_0.vftPasses as P, Scans as S 
    where P.user_name='terak' and S.details2=P.`pass_no` order by 
datePart(yy, convert(datetime, S.date_time, 103)) ASC 
+0

我尝试在我的sqlEditor中使用datePart节。它给我一个错误。我不确定为什么。 'datetime'是正确的数据类型?那么103指的是什么? –

相关问题