【问题标题】:SQL Server: Use different date format in Select when selected date equals current dateSQL Server:在选定日期时使用不同的日期格式等于当前日期
【发布时间】:2014-09-13 07:08:24
【问题描述】:

我有一个表格,其中有一列“modTime”格式化为日期时间。 要从此列中获取日期,我在 Select 中使用以下行,它返回格式为 DD MMM YYYY 的日期:

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

当日期与当前日期匹配时,有没有办法可以以不同的格式(如下所示)返回日期,否则只能使用上述格式?这会将日期返回为 Today at hh:mm。

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

当我单独使用它们时,这两种方式都有效,但我找不到使用 CASE 等组合它们的方法。

【问题讨论】:

  • 这让我觉得应该由您的代码在 UI 端完成,而不是加载到 SQL 上。这不是一个坏问题,但如果您需要在 T-SQL 中执行此操作,您可能需要重新考虑您的架构。
  • 谢谢。是的,我也可以在 PHP 中做到这一点,但我不确定这里有什么更好的方法。
  • @MatthewHaugen 你是对的,但我认为在数据库端这样做可能会给我们在 UI 端带来一些性能优势。
  • 是的,我也是这么想的,尤其是。因为我必须一次选择多个日期。

标签: sql sql-server datetime select


【解决方案1】:

你可以试试这个:

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

【讨论】:

  • 谢谢!我使用的是 SQL Server 2008,所以上述方法不起作用,但我会检查您提供的链接。
【解决方案2】:

你不会使用equals匹配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(day, datediff(day,0, getdate())

你可以使用:cast(getdate() as date)

两者都具有在 00:00:00 给您“今天”的效果

【讨论】:

  • 这是完美的——正是我想要的。非常感谢!
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多