2016-10-14 51 views
-3

我通過SELECT語句動態創建列。該列的內容是一個字符串,然後用作電子郵件的內容。SQL使用製表符而不是空格填充列內容

的文字是這樣的:

text 1 | text 2 | text 3 | ... 
text 123 | text 223 | text 323 | ... 

你看,這兩條線沒有對齊。預期的輸出應該是這樣的:

text 1 | text 2 | text 3 | ... 
text 123 | text 223 | text 323 | ... 

顯而易見的解決方案是將墊,以便爲每個字段具有相同尺寸的每個字段。爲了這個,我用下面的代碼:

LEFT(field1 + REPLICATE(' ', 20), 20) 

我的問題是,在Outlook中的文本仍然未顯示正確對齊儘管,如果我將文本複製到記事本,它是正確對齊。原因是,Outlook使用Arial顯示文本郵件,而Arial空白空間的大小與其他字符不一樣。因此填充不會產生預期的結果。

我現在的問題是:是否有其他方式使用此填充方法爲了在Outlook郵件中獲得相同大小的顯示字段?可能通過填充選項卡?但我認爲我的方法然後不再工作了...

+1

哥們SQL並不意味着這一點。只需將結果粘貼到excel並添加邊框,然後將其複製到Outlook中 –

+2

爲您的電子郵件準備HTML內容。 – techspider

+0

100%同意@Prdp,但您可能想看看'sp_send_dbmail',您可以將結果作爲純文本,html或作爲附件發送......包括excel。 – scsimon

回答

1

關於TAB,它DAW斯內德對我說,你在談論尾隨標籤

Declare @Table table (SomeField varchar(50)) 
Insert into @Table values 
('Some Text'), 
('Some Longer Text with more') 

Select String = SomeField+replicate(char(9),(30-Len(SomeField))/4)+'|' 
From @Table 

返回

Some Text     | 
Some Longer Text with more | 
+0

幾乎在那裏,但不完全。看到這個截圖:http://i.imgur.com/un6FnMN.png爲第一個字符串(第一行,它有21個字符)創建了5個選項卡。對於第二個字符串(20個字符),將創建四個選項卡。數學是正確的,但是對於第一個字符串它會產生太多的標籤。請注意,我已將代碼'30'更改爲'40' – beta

+0

沒問題,出於某種原因,尺寸爲4,8,12,16等的字符串有一個額外的選項卡,它本不應該存在。我現在檢查這些情況並刪除其中一個選項卡。 – beta

0

如果你不想(或不能)創建HTML @TechSpider和@Shnugo提到,你可以簡單地把你的字符串作爲一個字符(20)

cast(field1 as char(20)) 

對於實施例

Select '| '+cast('text1' as char(20))+' | '+cast('text1' as char(20))+'|' 

返回

| text1    | text1    | 
+0

你知道一個解決方案,我可以墊與'標籤'?問題是我需要不同數量的選項卡,因爲這些字段的大小可能不同。 – beta

+0

@beta不清楚你在找什麼。視覺會有所幫助。因爲字符串大小不同,複製(char(9),5)(5個選項卡)或複製('\ t',5)(編碼) –

+0

,總是複製5個選項卡不起作用。對於一些較短的字符串,我可能需要6個選項卡。對於更長的字符串,我只需要3個選項卡以獲得相同大小的字段。你知道我的意思? – beta

相關問題