【问题标题】:How to evenly space 3 concatenated fields in the result set如何在结果集中均匀分布 3 个连接字段
【发布时间】:2012-09-23 22:10:59
【问题描述】:

我将三个字段连接到一个字段中,但是当我运行查询时,结果集是正确的,但它们在一个字段中的间距不均匀。我将如何将它们整齐而正确地隔开。谢谢你的帮助。

这里是查询:

SELECT CONVERT(varchar(20),Book)+ Space(2) + '(' + CONVERT(varchar(30),Year)
+ ')' + Space(2) + '(' + CONVERT(varchar(30),Print) + ')' As  'Film Description', Genre,
Cost
FROM Film
Order By Year DESC, Book ASC

【问题讨论】:

  • Year 什么时候只能是 4 个字符?
  • @Aaron - 几分钟前的未来证明呢? :) 就我个人而言,我计划活到 24,123
  • @Richard 当然是 Y10K 错误。好吧,即使您在校对 10000 年,也不需要 30 个字符,除非您拼写出 the year ten thousand...
  • 不要尝试在查询中进行显示格式设置。改为在前端应用程序或报告工具中执行此操作。

标签: sql sql-server tsql concatenation


【解决方案1】:

由于VARCHAR 会忽略尾随空格,因此您需要使用其他不会忽略的数据类型(例如CHAR)。其他几个cmets:

  • 小心使用保留字,例如yearprint 作为列名
  • 小心使用 'single quotes' 作为别名分隔符([square brackets] 更具前瞻性,更难与字符串文字混淆)
  • 您应该使用架构前缀(例如dbo.Film
DECLARE @Film TABLE(Book VARCHAR(255), [Year] INT, [Print] VARCHAR(255));

INSERT @Film 
SELECT 'a', 2012, 'hello there this is at least 30 characters, right?'
UNION ALL 
SELECT 'this must be at least 30 characters too, right?', 2011, 'b';

SELECT CONVERT(CHAR(20), Book)
 + SPACE(2) 
 + '(' + CONVERT(CHAR(4),[Year]) + ')' 
 + SPACE(2) 
 + '(' + CONVERT(CHAR(30), [Print]) + ')' 
 As [Film Description]
FROM @Film
Order By [Year] DESC, Book;

【讨论】:

    【解决方案2】:

    使用Convert(Char( 而不是Convert(Varchar( Varchars 已经去掉了空格..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多