プロが教える店舗&オフィスのセキュリティ対策術

sqlserver2005

文字列のカラム(ただし数字のみ)と、画面から文字列としてきた
数字の大小を比較したいと思っています。

たとえば、WHERE ~ 【対象カラム】 > CONVERT(NUMERIC,'1')のように
しようと思っていたのですが、この場合、【対象カラム】の中に
空白があるとこけてしまいます。
文字列なので、空がNULLとは限らないため困っています。
そもそもINT型のカラムならば良いのですが、都合により文字列の
カラムにするしかなく。

妙案ありましたらアドバイスいただけないでしょうか。

A 回答 (2件)

ちょっとまわりくどいですが


CASE NUMERIC = '' WHEN THEN 0 ELSE CONVERT(NUMERIC,'1') END
と空白NULLチェックすればコケはしないです。
ただし、文字の比較なら思った結果は得られません。
No1の方の指摘どおりになるでしょう

それよりはゼロフィルした値と比較したほうが楽ではないでしょうか?

SUBSTRING('0000000000' + 【対象カラム】 , LEN(【対象カラム】) , 10) > SUBSTRING('0000000000' + NUMERIC , LEN(NUMERIC) , 10);

パフォーマンス無視なので、レコード数が少ないならこれでも大丈夫ですが、
    • good
    • 0

解決策ではないんですが。


> 空がNULLとは限らないため困っています。
isnull([列名], ' ')
を利用するとか。

> 都合により文字列のカラムにするしかなく。
文字列で比較は、順序がおかしくなりませんか?

1~20を数字の文字列にすると
'1'
'11'
'12'
'13'
'14'
'15'
'16'
'17'
'18'
'19'
'2'
'20'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
じゃないですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す