【问题标题】:Changing column names in SQL display更改 SQL 显示中的列名
【发布时间】:2013-06-24 20:06:30
【问题描述】:

这是我现有的运行无错误的代码:

    SELECT  ItemId,
   CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
        SUBSTRING([Date],10,2)+':'+
        SUBSTRING([Date],12,2)+':'+
        SUBSTRING([Date],14,2)+'.'+
        SUBSTRING([Date],15,3))) AS DATE) 'Date',
    LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
        SUBSTRING([Date],10,2)+':'+
        SUBSTRING([Date],12,2)+':'+
        SUBSTRING([Date],14,2)+'.'+
        SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
 [Object],
 SourceSite,
 DestSite
 FROM (  SELECT  ItemId,
 CONVERT(VARCHAR(18),[Date]) [Date],
 [Object],
 SourceSite,
 DestSite,
            UserCode
 FROM JnlMediumMove
 WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
 substring(convert(varchar(50), [Date]), 5, 2) + '-' +
 substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to remove     the time part
WHERE UserCode = 'Automation'
ORDER BY [Date] DESC;

但是我需要对数据的显示进行一些更改。 1) 将列 ItemId 的名称更改为“项目 ID” 2) 将列对象的名称更改为“媒体” 3) 将列 SourcSite 的名称更改为“源站点” 4) 将列 DestSite 的名称更改为“Destination Site” 5)在源站点和目标站点之间添加一列,称为“评论” 6) 该列中的每个条目都必须包含此语句“已成功移动到”

请注意:我每天都在尝试针对这些报告运行批处理作业。因此,列标题和更改都必须在一个查询中完成。任何人都可以对我的代码进行任何更改以获得所需的输出吗?那将不胜感激。我正在使用 SQL Server Management Studio 2008。

【问题讨论】:

  • 你不知道哪一部分?您是想通过alter 更改实际的列名还是简单地为这个单一的选择语句的列名设置别名?
  • 您尝试过使用别名吗?试试这个SQL column alias
  • 我在执行此操作时收到此错误:Msg 102, Level 15, State 1, Line 1 “ID”附近的语法不正确。消息 102,级别 15,状态 1,第 25 行“A”附近的语法不正确。
  • 我理解别名的概念,只是我从来没有将它应用到这么长的查询中。 @rs
  • @omarK,查询长度与别名无关,只需为要使用不同名称的列添加别名。我认为您懒得自己编辑查询并添加别名,并希望我们完成您的工作:)

标签: sql sql-server-2008 tsql split


【解决方案1】:

到目前为止,在阅读了所有 cmets 之后,问题似乎不是“如何为我的所有列添加列别名?”,而是“我如何知道在意大利面条的混乱中已经命名或未命名的内容?我继承的查询?”

让我试着提供一些背景信息。由于各种历史原因,SQL Server 支持以下所有重命名列的方法。

  • 名称 = 表达式
  • 表达式 名字
  • 表达式 AS 名字
  • '名称' = 表达式
  • 表达式 '名字'
  • 表达式 AS '名字'
  • "名称" = 表达式
  • 表达式 "名字"
  • 表达式 AS "名字"
  • [名称] = 表达式
  • 表达式 [名称]
  • 表达式 AS [名称]

过去,您的查询中随意使用了许多这些组合。想必每一个参与过它的开发者都应用了他/她自己的风格。

我建议您仔细检查每个列表达式并将它们系统地转换为一种一致的语法。列表中的最后一个可能是最安全和最现代的。如果您将列别名与文本编辑器中的特定制表位对齐,也会有所帮助。完成此操作后,应用要求您执行的列名称应该是一件非常简单的事情。

【讨论】:

  • 请注意,"name" = expression 格式在 SQL Server 中已被弃用。同样在 SQL Server 中,我们中的许多人使用 name = expression 是因为它具有出色的清晰度(您永远不必在大型表达式的末尾寻找别名)。
【解决方案2】:
SELECT ItemID AS [Item Id]

等等等等等等?我认为这就是您所要求的(列名的别名)。其余的将是相似的。对于 Comments 列,'Was successfully moved to' AS [Comment] 应该可以正常工作。

试试这个:

SELECT  ItemId AS [Item Id],
   CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
        SUBSTRING([Date],10,2)+':'+
        SUBSTRING([Date],12,2)+':'+
        SUBSTRING([Date],14,2)+'.'+
        SUBSTRING([Date],15,3))) AS DATE) 'Date',
    LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
        SUBSTRING([Date],10,2)+':'+
        SUBSTRING([Date],12,2)+':'+
        SUBSTRING([Date],14,2)+'.'+
        SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
 [Object] AS [Media],
 SourceSite AS [Source Site],
 'Was successfully moved to' AS [Comments],
 DestSite AS [Destination Site]
 FROM (  SELECT  ItemId,
 CONVERT(VARCHAR(18),[Date]) [Date],
 [Object],
 SourceSite,
 DestSite,
            UserCode
 FROM JnlMediumMove
 WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
 substring(convert(varchar(50), [Date]), 5, 2) + '-' +
 substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to remove     the time part
WHERE UserCode = 'Automation'
ORDER BY [Date] DESC;

【讨论】:

  • 我不确定现有代码的语法会是什么样子,您是否可以将您的建议添加到我的代码中,以便我可以尝试运行它?谢谢
  • LMFAO...向他发送数据库凭据,他会登录并为您完成工作。
  • @Mike Cheel 我尝试应用项目 ID 别名,但它给了我这个错误:消息 102,第 15 级,状态 1,第 1 行“ID”附近的语法不正确。消息 102,级别 15,状态 1,第 25 行“A”附近的语法不正确。
  • 您使用的是 SQL Server 吗?另外,您是否将项目 ID 括在 [Item Id] 这样的括号中?
  • 是的,我是,是的,我做到了@Mike Cheel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
相关资源
最近更新 更多