こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLserver2005 nvarchar を float に変換中にエラー発生

SELECT TOP (100) PERCENT
ACODE * 10 + CCODE AS Aコード,
ACODE * 1000 + CCODE * 100 + GCODE AS Bコード,
CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END AS 番地,
MIN(DISTINCT X) AS X,
MIN(DISTINCT Y) AS Y
FROM
dbo.Tbl
GROUP BY
ACODE * 10 + CCODE, ACODE * 1000 + CCODE * 100 + GCODE, CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END
ORDER BY
字丁目コード, 号特定コード, 番地


上記のクエリを実行すると「データ型 nvarchar を float に変換中にエラーが発生しました。」というメッセージが表示されてしまいます。
おそらく[CHIBAN]フィールドはnvarchar型のためエラーが発生していると思うのですが、
なぜ強制的にfloat型にしようとするのかわかりません。

どのように回避すればよいでしょうか。ご教示のほどお願い致します。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-05-12 18:24:04

QNo.4953115

すぐに回答ほしいです

質問者が選んだベストアンサー

>CASE WHEN [GCODE] = 0 THEN [CHIBAN] ELSE [GCODE] END

上記のCASE文の[GCODE]が数値型のようなので暗黙の型変換が行われているのでしょう。

なので、[CHIBAN]内に文字列が入っていて変換できないのでしょう。

戻り値の型
http://msdn.microsoft.com/ja-jp/library/ms181765.aspx
>result_expressions およびオプションの else_result_expression の型のセットの中から、最も優先順位の高い型を返します。詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。

データ型の優先順位
http://msdn.microsoft.com/ja-jp/library/ms190309.aspx

CASTで文字列に明示的に変換すればよいでしょう。
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx

データ
[GCODE] [CHIBAN]
0A
01
03
1A
1B


エラーケース
select
CASE WHEN [GCODE] = 0 THEN
[CHIBAN]
ELSE
[GCODE]
END AS 番地
from test

オッケーケース
select [GCODE],[CHIBAN],
CASE WHEN [GCODE] = 0 THEN
[CHIBAN]
ELSE
CAST([GCODE] AS nvarchar(10))
END AS 番地
from test

GCODECHIBAN番地
0A A
01 1
03 3
1A 1
1B 1

Select時には型を合せましょう。

投稿日時 - 2009-05-12 19:53:24

お礼

ご親切な回答ありがとうございます。
解決いたしました。

>Select時には型を合せましょう。
Accessで慣れていたもので。。。お恥ずかしいです。

ありがとうございます。助かりました。

投稿日時 - 2009-05-12 20:22:49

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問