1

有以下查询:

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 发生。我疯了吗?

4

1 回答 1

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)?它与领先的“%”有关吗?这需要逃避还是什么?

于 2013-01-17T12:23:22.250 回答