如何在SQL Server中获取dateformat(dd / MMM / yyyy)的先前记录

时间:2016-11-02 10:16:20

标签: sql-server sql-order-by

当我得到这个时,我遇到了问题" 16Nov010001"以前的记录" 16Oct310001"。

我试图订购date和serialno但没有工作。我怎么解决这个问题?

我的疑问是:

SELECT TOP (1) serialno 
FROM dbo.Table 
WHERE (serialno < '16Nov010001') 
ORDER BY tranferdate, serialno DESC

SELECT TOP (1) serialno 
FROM dbo.Table 
WHERE serialno < '16Nov010001' 
ORDER BY serialno DESC

表记录:

serialno    |           date 
------------------------------------------
16Nov010001 |   2016-11-01 11:28:40.640
16Nov010002 |   2016-11-01 11:32:38.530
16Nov010003 |   2016-11-01 11:35:08.437
16Nov010004 |   2016-11-01 11:36:30.117 
16Nov010005 |   2016-11-01 11:37:01.760
16Nov010006 |   2016-11-01 11:39:45.393
16Oct300001 |   2016-10-30 19:40:29.963
16Oct310001 |   2016-10-31 18:42:45.833

2 个答案:

答案 0 :(得分:0)

你正试图使用​​一个字符串小于另一个字符串的地方,但是如果你想命令这样做,那么日期与你可以使用日期的顺序相同相反,据我所见,您的数据将有效。

您拥有2016-11-01 11:28:40.640创建的16Nov010001 而你是在2016-11-01 11:32:38.530 4分钟后创建的16Nov010002。

检查出来。 Use '=' or LIKE to compare strings in SQL?

答案 1 :(得分:0)

您发布的所需输出将由此查询返回

SELECT serialno, date
FROM dbo.Table 
WHERE serialno <= '16Nov010001' 
ORDER BY serialno DESC

我删除了TOP 1,因此会返回尽可能多的记录&lt; =&#39; 16Nov010001&#39;

PS:请记住,日期字符串的顺序与其日期值不同。例如&#39; 16Dic010001&#39; &LT; &#39; 16Nov010001&#39 ;.因此,您可能希望按照&#34; date&#34;进行比较和排序。而不是&#34; serialno&#34;。

SELECT serialno, date
FROM dbo.Table 
WHERE date <= '2016-11-01' 
ORDER BY serialno DESC