【问题标题】:How do I name a column as a date value如何将列命名为日期值
【发布时间】:2011-07-14 10:37:14
【问题描述】:

结果看起来像这样,但是如果列名显示“今天”,我希望它是今天的日期。

【问题讨论】:

  • 您能更明确地说明您期望的结果吗?另外,请注明数据库。这是关于 Oracle、MySQL 等的吗?
  • 您的栏目每天都在增加?
  • @stukselbax 我认为这是另一回事。
  • 通常不建议这样做 - 每个 SQL 查询都应始终返回具有相同“形状”的结果集 - 其中“形状”是指它应该具有相同的列 - 这些列所在的位置由他们的 name 和他们的 type 定义。因此,虽然您可能会找到一种方法(可能使用某种形式的动态 SQL),但最好在另一层执行这种格式化技巧 - 也许在报告工具中?

标签: sql


【解决方案1】:

试试这个技巧:

declare @dt datetime
declare @sql varchar(100)
set @dt = getdate()
set @sql = 'select 1 as [ ' + convert( varchar(25),@dt,120) + ']'  
exec (@sql)

在你的情况下:

declare @dt datetime
declare @sql varchar(100)
set @dt = getdate()
set @sql = 'select 0 as [ ' + convert( varchar(25),@dt,120) + ']'  
exec (@sql)

【讨论】:

  • 引发错误!正是因为这是您执行的错误方式!发布您的查询,然后我将在更正后发回
  • 这是我想要的最基本的内容:选择 0 作为 GetDate() 所以列名是今天的日期...
【解决方案2】:

我将返回一个表示天偏移量的整数并在客户端中对其进行解析,否则您将不得不使用动态 SQL 或对基础列名本身执行某些操作;;

declare @sql nvarchar(128) = '
select 
  col1,
  col2,
  0 as [' + cast(getdate() as nvarchar(32)) + ']
from T'
exec(@sql)

或者

--today
declare @now varchar(32) = cast(getdate() as varchar(32)) 

--result to temp table
select col1, col2, 0 as [Now] into #T from TheTable
--rename col
exec tempdb..sp_rename '#T.Now', @now, 'COLUMN'
--select
select * from #T

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2012-03-31
    • 2021-11-26
    相关资源
    最近更新 更多