問題ID 19891

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-2-10 15:44
nyamada43  新米   投稿数: 4
BETWEEN演算子の問題になるのですが、以下のSQLではどの結果が返されるかという問いです。

--
SELECT prod_name
 FROM products
 WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';


Lantern
(Wide)LEDシーリングライト
LEDライト
led light
HighPower_LED_ハンディライト2
---

解答では、LanternとHighPower_LED_ハンディライト2と出ました。
そもそも問題ではどの文字コードが使用されている前提なのかわからないのもありますが、BETWEEN演算子ではLEの上限値まで含まれるものと思っていたのでLEDライトも正解かと思ったのですが。

どなたかこの問題の解説を頂けないでしょうか。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-2-10 21:19
quensan  長老   投稿数: 119
過去に似たような質問がありましたが、いかがでしょうか。

http://ping-t.com/modules/forum/index.php?topic_id=2673

11g SQLのフォーラムですが同じ問題のようです。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-2-10 22:51
nyamada43  新米   投稿数: 4
ありがとうございました。解決出来ました。
LEDが含まれないのはOracleが比較する時に、値が長い方に合わせて、もう一方を空白で埋めるという動作をしており、よってH(ASCII 72)〜LE(ASCII 76+69)という値で文字列を見ているということと理解しました。
文字コードうんぬんよりも、この観点不足だったようです。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.