-1

我有两次 First 和 Last ..我需要一个显示时差的查询,如果

GETDATE() = now

那么它应该说正在进行中。就像是前一天,它应该说“还剩 12 小时 10 分钟”,如果现在正在发生,它应该说“进行中”,如果它已经过去,那么它应该说“通过”

我尝试了一些查询,但没有得到想要的结果。

SELECT
    (DATEDIFF(dd, First_Half_Start, GETDATE())) -
    (CASE WHEN DATEDIFF(dd,0,First_Half_Start) = 0 THEN 1 ELSE 0 END)
FROM Match_Schedule;
4

2 回答 2

1

没有什么功能是自动做的。您必须手动构建消息。

SELECT @dates=(DATEDIFF(dd, First_Half_Start, GETDATE())),
       @hours=(DATEDIFF(hour, First_Half_Start, GETDATE()))-(DATEDIFF(dd,     First_Half_Start, GETDATE()))*24,
       @minutes=(DATEDIFF(minute, First_Half_Start, GETDATE()))-(DATEDIFF(hour, First_Half_Start, GETDATE()))*60,
       @seconds=(DATEDIFF(second, First_Half_Start, GETDATE()))-(DATEDIFF(minute, First_Half_Start, GETDATE()))*60
FROM Match_Schedule;

IF ((@dates<0 or @hours<0 or @minutes<0 or @seconds<0)
 SET @status=CAST(ABS(@dates) AS VARCHAR)+' Days '+CAST(ABS(@hours) AS VARCHAR)+' hours '+CAST(ABS(@minutes) AS VARCHAR)+' minutes '+CAST(ABS(@seconds) AS VARCHAR)+' seconds left'
ELSE
 SET @status='In Progress'
于 2013-09-14T06:59:09.327 回答
0

在 SQL Server 端完成所有工作看起来并不容易。

但您可以计算差异seconds(因为它是您的准确)。

SQL 服务器

SELECT
    (DATEDIFF(ss, First_Half_Start, GETDATE())) AS seconds
FROM Match_Schedule;

然后在您的客户端,根据需要呈现此值。

就像是:

客户

if (seconds > 0) {
   // create new TimeStamp object depending your language
   // make you sentence from this timestamp
} else {
  // show "in progress..."
}
于 2013-09-14T03:29:23.480 回答