2013-01-16 26 views
1

有以下查詢:SQL服務器字符串連接怪異/截斷

Select 
    'SpO2'  = CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C120]))), 
    'Separator' = '% on .', 
    'FiO2'  = CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C130]))), 
    'VALUE'  = CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C120]))) 
        + '% on .' 
        + CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C130]))) 
From... 

對於一個給定的行,我可能有以下幾點:

血氧飽和度= '96',分隔符= '%上。' ,的FiO2 = '97',值= '9'

或者...

血氧= '100',隔板=,的FiO2 = '97',值= '1'

'上。%'

顯然,在#1中,我想'.96'上的96%和#2中,我想'97%上的100%'。

顯然,它正在做字符串截斷,只返回'VALUE'的第一個字符,但是爲什麼?這在SQL Server 2008 R2上工作(我認爲?)。目前的失敗是使用SSMS 2012發生的。我是否失去了主意?

+0

你能顯示一些實際的數據嗎? – JNK

+1

還有哪些數據類型是你的源字段'c120'和'c130'? – JNK

+0

您是否嘗試過'SELECT(CONVERT(...)+'%。'+ CONVERT(...))語法作爲'VALUE'FROM ...'? –

回答

0

出於某種原因,我想到或許問題出在我在兩個轉換值之間放置的字符串字面值。

果然,下面似乎解決了問題:

Select 
    'VALUE'  = CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C120]))) 
        + CONVERT(VARCHAR(MAX),'% on .') 
        + CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(FLOAT, [C130]))) 
From... 

儘管這在技術上是一個「答案」,我確實愛一個人來向我解釋。爲什麼在世界上是不是

'% on .' 

簡單地理解爲是類型VARCHAR或至少CHAR(6)的?這與領先的「%」有關嗎?這是否需要逃避或什麼?

相關問題