SQL Server字符串连接奇数/截断

时间:2013-01-16 21:04:44

标签: sql-server string concatenation truncation

具有以下查询:

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...

对于给定的行,我可能会有以下内容:

SpO2 ='96',分隔符='%on。',FiO2 = '97',值='9'

或者...

SpO2 ='100',分隔符='%on。',FiO2 = '97',值='1'

显然,在#1中,我喜欢'96%on .97'和#2,我喜欢'100%on .97'。

显然,它正在进行字符串截断,只返回'VALUE'的第一个字符,但为什么呢?这在SQL Server 2008 R2上有效(我认为?)。使用SSMS 2012时发生了当前的故障。我是否已经忘记了?

1 个答案:

答案 0 :(得分: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)类型?这与领先的“%”有关吗?这需要转义还是什么?