2014-09-13 136 views
1

我有一个格式为日期时间的列“modTime”的表格。 从这个专栏中,我使用下面的行中我选择它的格式DD MMM YYYY返回日期获取日期:SQL Server:当选择日期等于当前日期时,在选择中使用不同的日期格式

CONVERT(VARCHAR(11), G.modTime, 106) AS modTime 

有没有我可以在不同的格式返回日期的方式(如以下),当它匹配当前的日期,只有其他方式使用上述格式?这将以“今日”的时间返回hh:mm。

('Today at ' + CONVERT(VARCHAR(5), G.modTime, 108)) AS modTime 

这两种方式在工作的时候分开使用,但我无法找到一种方法使用CASE等把它们结合起来提前

非常感谢任何帮助,蒂姆。

+3

的“今天”给你的影响这令我的东西,也许应该做UI端由您的代码,而不是加载到SQL。这不是一个坏问题,但如果您需要在T-SQL中执行此操作,您可能需要重新考虑您的体系结构。 – 2014-09-13 07:33:09

+0

感谢您的支持。是的,我也可以用PHP来完成,但我不确定这里有什么更好的方法。 – user2571510 2014-09-13 07:38:23

+0

@MatthewHaugen你是对的,但我认为在数据库端做这件事可能会给我们一些在UI方面的性能优势。 – 2014-09-13 07:39:14

回答

1

,你将不会匹配使用等于GETDATE(),您需要设置GETDATE()的时候午夜

select 
     case when G.modTime >= dateadd(day, datediff(day,0, getdate()), 0) 
       then ('Today at ' + CONVERT(VARCHAR(5), G.modTime, 108)) 
      else 
       CONVERT(VARCHAR(11), G.modTime, 106) 
     end AS modTime 
from G 

上面我已经使用:DATEADD(日,DATEDIFF(日,0,GETDATE())

相反,你可以使用:CAST(GETDATE()的日期)

两者具有00:00:00

+0

这是完美的 - 正是我所期待的。非常感谢 ! – user2571510 2014-09-13 09:20:01

2

你可以试试这个:

select iif(G.modTime=getdate(),('Today at ' + CONVERT(VARCHAR(5), G.modTime, 108)),CONVERT(VARCHAR(11),G.modTime, 106)) from <table name> 

请注意,IIF仅适用于SQL Server 2012中或更高版本。

http://msdn.microsoft.com/en-IN/library/hh213574.aspx

对于旧版本,这篇文章可以帮助你:

SQL Server 2008 IIF statement does not seem enabled

+0

感谢您的支持!我使用SQL Server 2008,所以上述不起作用,但我会检查你提供的链接。 – user2571510 2014-09-13 07:30:04

相关问题