2013-01-16 23 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)的?这与领先的“%”有关吗?这是否需要逃避或什么?

相关问题