0

次のクエリを実行すると、「VARCHAR を FLOAT にキャストできません」というエラーが表示されます。問題は、私のチームの他の誰かがしばらく前にDBを設計し、ミリ秒をvarcharとして配置し、値がそこにない場合があるため、代わりに「NA」を配置したことです。

Milliseconds の値をキャストして AVE() を取得すると、「NA」はキャストできません。次のように、「NA」のデフォルト値を定義する方法はありますか?

IF a.Milliseconds == "NA" 
     0
ELSE
     CAST(a.Milliseconds AS FLOAT)



SELECT 
  b.Date, 
  AVG(CAST(a.Milliseconds AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
ON a.CyclesId = b.Id
GROUP BY b.Date

Sample Data

CyclesId | Milliseconds
1        | 24.1557
2        | 23.4886
3        | NA
4

2 に答える 2

6

あなたCASEの価値観を表現する

SELECT 
  b.Date, 
  AVG(CAST(CASE WHEN a.Milliseconds = 'NA' THEN '0' ELSE a.Milliseconds END AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
    ON a.CyclesId = b.Id
GROUP BY b.Date

NA値をまとめて除外する場合は、次のようにします。

SELECT 
  b.Date, 
  AVG(CAST(a.Milliseconds AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
    ON a.CyclesId = b.Id
WHERE a.Milliseconds != 'NA'
GROUP BY b.Date

SQL Fiddle with Demoを参照してください

于 2012-07-25T21:08:48.270 に答える
-1

ケースを使用します...たとえば...

SELECT 
  b.Date, 
  AVG(CAST( (case when a.Milliseconds = 'NA' then 0 else a.Milliseconds end) AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
ON a.CyclesId = b.Id
GROUP BY b.Date
于 2012-07-25T21:09:46.453 に答える