如何在Sql server中根据日期和时间获取最新记录
我试图根据日期和时间获取最新记录,但列中包含的时间是12小时am/PM格式 假设我的记录在 2015-09-07 12:50:37.1983315下午-创下这一纪录 2015-09-07 03:12:15.1983315下午-实际上我需要得到这张唱片 上面的结果来自下面的查询如何在Sql server中根据日期和时间获取最新记录,sql,sql-server,Sql,Sql Server,我试图根据日期和时间获取最新记录,但列中包含的时间是12小时am/PM格式 假设我的记录在 2015-09-07 12:50:37.1983315下午-创下这一纪录 2015-09-07 03:12:15.1983315下午-实际上我需要得到这张唱片 上面的结果来自下面的查询 SELECT top 10 * FROM SHAdminMessageIndex where Appid='62001308607984608300' and PolicyNumber='0081317' order
SELECT top 10 * FROM SHAdminMessageIndex where Appid='62001308607984608300' and
PolicyNumber='0081317' order by BeginTime desc
那么,如何通过使用12小时格式的AM和PM来获得结果呢。提前感谢试试这个
SELECT top 10 * FROM SHAdminMessageIndex where Appid='62001308607984608300'
and PolicyNumber='0081317' order by stuff(convert(varchar(19), BeginTime,
126),11,1,' ') desc
SELECT top 10 * FROM SHAdminMessageIndex
where Appid='62001308607984608300' and PolicyNumber='0081317'
order by
cast(BeginTime as datetime2) desc
试试这个
SELECT top 10 * FROM SHAdminMessageIndex where Appid='62001308607984608300'
and PolicyNumber='0081317' order by stuff(convert(varchar(19), BeginTime,
126),11,1,' ') desc
SELECT top 10 * FROM SHAdminMessageIndex
where Appid='62001308607984608300' and PolicyNumber='0081317'
order by
cast(BeginTime as datetime2) desc
或
你想要每天的第一张唱片吗?您可以按日期分组,并在每组中取第一个。因此,使用排序函数,如
行数
和CTE
:
WITH CTE AS
(
SELECT t.*,
RN = ROW_NUMBER() OVER (PARTITION BY CAST(BeginTime AS Date) ORDER BY BeginTime )
FROM SHAdminMessageIndex t
WHERE Appid='62001308607984608300'
AND PolicyNumber='0081317'
)
SELECT TOP 10 CTE.*
FROM CTE
WHERE RN = 1
ORDER BY BeginTime DESC
这就是为什么我们应该始终使用适当的数据类型来存储数据。尝试将
BeginTime
强制转换为DATETIME2
SELECT top 10 *
FROM SHAdminMessageIndex
where Appid='62001308607984608300'
and PolicyNumber='0081317'
order by Cast(BeginTime AS DATETIME2) DESC
使用PARSE将字符串转换为DATETIME2
select top 10 *
from SHAdminMessageIndex
where Appid='62001308607984608300' and PolicyNumber='0081317'
order by parse(BeginTime as datetime2 using 'en-US') desc;
确保指定不依赖于会话设置的语言-您的datetime字符串可能不是另一种语言的有效datetime(在许多语言中PM和AM无效)
SQL FIDLE:。列BeginTime上的数据类型是什么?您想要每天的第一条记录吗?您使用的是哪个sql server版本?所以您将日期和时间存储在字符串中?不是约会时间吗?为什么?更改您的表以便使用datetime,查询数据将不会有问题。您应该这样做,您的问题将得到缓解,但您的标题与示例数据冲突,标题表明您需要“最新”记录,但在您的示例中,您表示想要的日期是这两个日期中最早的一个?@Sanjay如果可能,请立即修复此列的数据类型。必须在convert/cast中包装该列,并将其作为where或order by的一部分,这将导致扫描整个表(性能一直很差)。很抱歉没有提及。数据类型为nvarchar。