- - PR -
SQL文
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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です。 | ||||
|
投稿日時: 2006-09-11 09:50
とりあえずvarchar項目の中身が数字かどうか判定する
関数を作ってみては? | ||||
|
投稿日時: 2006-09-11 10:38
桁を合わせて比較しちゃどう?
照合の設定まわりに依存しちゃいそうだけど。 | ||||
|
投稿日時: 2006-09-11 10:56
条件を right('000' + 項目B,3) > right('000' + '100',3)
のように桁をあわせればいけませんか? 桁数が多くなると多少見にくいかもしれませんが……^^; #一応確認やら何やらしてる間にかぶってしまった_| ̄|○ [ メッセージ編集済み 編集者: eternia 編集日時 2006-09-11 10:58 ] | ||||
|
投稿日時: 2006-09-11 11:25
SqlServer2000なら
IsNumeric関数とCase文組み合わせてなんとかなる様な気がします。 CASE WHEN ISNUMERIC(項目B) = 1 THEN ・・・ とか。 | ||||
|
投稿日時: 2006-09-11 12:43
ご返信ありがとうございます。
まず、桁合わせを行ってみたのですが、うまくいきません。 例えば、、、 ●'000050' < '000100' このような条件文になった場合でも、真とはなりませんでした。 やはりvarcharと判定されてしまっているのでしょうか・・・。 また、Isnumericを行ってみたのですが、全データが”Isnumeric=FALSE”と 判定されてしまいます。やはり項目自体がVarcharで作成されているので 無理なのでしょうか・・・。 何か私の方で勘違い等ありましたら、ご指摘下さい。 よろしくおねがい致します、 | ||||
|
投稿日時: 2006-09-11 12:58
対象となる項目がVARCHARであってもISNUMERICは問題なく「1か0」を返却しますよ。
よろしければWHEREの箇所がどのように記述されたかを見せていただけますか? #ISNUMERIC使って抽出した結果を元に、SELECTかければいけないですかね・・・? | ||||
|
投稿日時: 2006-09-11 15:21
上記の場合ならvarcharでも真になると思いますが…… right関数かけてますでしょうか? '00050' < '000100' の場合ですと50のほうが大きくなってしまいます。 '050' < '100'の形にして比較してみてください。 [ メッセージ編集済み 編集者: eternia 編集日時 2006-09-11 15:22 ] | ||||
1
