- PR -

SQL文

1
投稿者投稿内容
のの
ベテラン
会議室デビュー日: 2004/11/10
投稿数: 88
投稿日時: 2006-09-11 09:43
お世話になります。

SQL文で教えて下さい。

下記のようなテーブルがあったとして
**********************************
項目A 項目B
AAA 100
BBB 200
CCC 50
DDD 10A
EEE C01
**********************************

項目Bの型がVarcharであったとします。
このとき、例えば項目Bの値が100より小さい値をもつ
レコードを取得したいのですが、項目Bの型がVarcharなので
単純に 項目B < '100' とするわけにもいかず
また、Convertで型変換しようにも、項目Bには、
数字だけが格納されているわけではないので
型変換エラーとなってしまいます。
”項目Bが数字だけを対象として・・・”といったことは
できるのでしょうか???

SQLServer2000です。

めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-09-11 09:50
とりあえずvarchar項目の中身が数字かどうか判定する
関数を作ってみては?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-11 10:38
桁を合わせて比較しちゃどう?
照合の設定まわりに依存しちゃいそうだけど。
eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2006-09-11 10:56
条件を right('000' + 項目B,3) > right('000' + '100',3)
のように桁をあわせればいけませんか?
桁数が多くなると多少見にくいかもしれませんが……^^;

#一応確認やら何やらしてる間にかぶってしまった_| ̄|○

[ メッセージ編集済み 編集者: eternia 編集日時 2006-09-11 10:58 ]
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-09-11 11:25
SqlServer2000なら
IsNumeric関数とCase文組み合わせてなんとかなる様な気がします。

CASE WHEN ISNUMERIC(項目B) = 1 THEN ・・・

とか。
のの
ベテラン
会議室デビュー日: 2004/11/10
投稿数: 88
投稿日時: 2006-09-11 12:43
ご返信ありがとうございます。

まず、桁合わせを行ってみたのですが、うまくいきません。
例えば、、、

 ●'000050' < '000100'

このような条件文になった場合でも、真とはなりませんでした。
やはりvarcharと判定されてしまっているのでしょうか・・・。

また、Isnumericを行ってみたのですが、全データが”Isnumeric=FALSE”と
判定されてしまいます。やはり項目自体がVarcharで作成されているので
無理なのでしょうか・・・。

何か私の方で勘違い等ありましたら、ご指摘下さい。

よろしくおねがい致します、
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-09-11 12:58
対象となる項目がVARCHARであってもISNUMERICは問題なく「1か0」を返却しますよ。

よろしければWHEREの箇所がどのように記述されたかを見せていただけますか?

#ISNUMERIC使って抽出した結果を元に、SELECTかければいけないですかね・・・?
eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2006-09-11 15:21
引用:

 ●'000050' < '000100'

このような条件文になった場合でも、真とはなりませんでした。
やはりvarcharと判定されてしまっているのでしょうか・・・。



上記の場合ならvarcharでも真になると思いますが……
right関数かけてますでしょうか?

'00050' < '000100'

の場合ですと50のほうが大きくなってしまいます。
'050' < '100'の形にして比較してみてください。


[ メッセージ編集済み 編集者: eternia 編集日時 2006-09-11 15:22 ]
1

スキルアップ/キャリアアップ(JOB@IT)