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 では「.97 で 96%」を希望し、#2 では「.97 で 100%」を希望します。

どうやら、文字列の切り捨てを行って 'VALUE' の最初の文字のみを返しているようですが、なぜですか? これは、SQL Server 2008 R2 で動作しています (と思いますか?)。現在、SSMS 2012 を使用して障害が発生しています。

4

1 に答える 1

0

何らかの理由で、2 つの変換された値の間に配置した文字列リテラルに問題があるのではないかと思いました。

案の定、次の方法で問題が解決するようです。

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 に答える