Вопрос

I am trying to compare the dates and display the difference in twitter styled format (2 seconds ago, 1 minute ago, 2 days ago etc) with MSSQL 2008. Any help would be much appreciated. Thanks in advance.

Это было полезно?

Решение

Will this help you? You may need to add more condition for days and weeks

declare @dt datetime =getdate();
declare @posttime datetime =dateadd(SECOND,-2,getdate());
declare @diff bigint;

set @diff=datediff(SECOND,@posttime,@dt)
select case when @diff<60 then
            convert(varchar(2),@diff)+' seconds ago' 
            when @diff between 60 and 3599 then
                convert(varchar(2),@diff/60)+' minutes ago' 

            else
                convert(varchar(2),@diff/3600)+' hours ago' 
        end
--Next post which was about 1 minute ago
set @posttime=dateadd(SECOND,-62,getdate());
set @diff=datediff(SECOND,@posttime,@dt)

select 
    case when @diff<60 then
                convert(varchar(2),@diff)+' seconds ago' 
            when @diff between 60 and 3599 then
                convert(varchar(2),@diff/60)+' minutes ago'         
            else
                convert(varchar(2),@diff/3600)+' hours ago' 
            end

Другие советы

This will help u

DECLARE @D DATETIME 
SET @D = CAST('2014-02-17 13:10:50.053' AS DATETIME)
SELECT @D 
SELECT GETDATE() 
SELECT CASE WHEN    DATEDIFF(HH,@D,GETDATE()) > 48 THEN CAST( DATEDIFF(D,@D,GETDATE()) AS VARCHAR(20))+'  DAYS AGO'
            WHEN    DATEDIFF(HH,@D,GETDATE()) > 24 THEN CAST( DATEDIFF(D,@D,GETDATE()) AS VARCHAR(20))+'  DAY AGO'

            WHEN    DATEDIFF(HH,@D,GETDATE()) > 1 THEN CAST( DATEDIFF(HH,@D,GETDATE()) AS VARCHAR(20))+' HOURS AGO'
            WHEN    DATEDIFF(HH,@D,GETDATE()) = 1 THEN CAST( DATEDIFF(HH,@D,GETDATE()) AS VARCHAR(20))+' HOUR AGO'


            WHEN    DATEDIFF(MINUTE,@D,GETDATE()) > 1 THEN CAST( DATEDIFF(MINUTE,@D,GETDATE()) AS VARCHAR(20))+' MINUTES AGO'
            WHEN    DATEDIFF(MINUTE,@D,GETDATE()) = 1 THEN CAST( DATEDIFF(MINUTE,@D,GETDATE()) AS VARCHAR(20))+' MINUTE AGO'

            WHEN    DATEDIFF(SECOND,@D,GETDATE()) > 1 THEN CAST( DATEDIFF(SECOND,@D,GETDATE()) AS VARCHAR(20))+' SECS AGO'
            WHEN    DATEDIFF(SECOND,@D,GETDATE()) = 1 THEN CAST( DATEDIFF(SECOND,@D,GETDATE()) AS VARCHAR(20))+' SEC AGO'
       END TIMESPAN
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top