Re: betweenに関する。

この質問の投稿一覧へ

なし Re: betweenに関する。

msg# 1.1
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-5-15 21:57 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
まず大事なのは、ここでの問題は「BETWEEN」であって「LIKE」ではない、ということです。
 SELECT prod_name
 FROM products
 WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
条件はUPPER(prod_name)により、prod_nameの文字列がすべて大文字で比較されます。次にBETWEENですが、BETWEENはざっくりいうと「大小比較」なのです。わかりやすく言うと「BETWEEN 100 AND 200」って言ったときに「210」は含まない、ということです。

ここが大丈夫だったら話はかんたんなのです。

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

なんで答えが1,4番だけなのかよくわかりません。LEDライトはできないのかな。。・?
全部大文字にすると
LANTERN
LED LIGHT
(WIDE)LEDシーリングライト
HIGHPOWER_LED_ハンディライト2
LEDライト
ですよね。並び替えると
(WIDE)LEDシーリングライト
HIGHPOWER_LED_ハンディライト2
LANTERN
LED LIGHT
LEDライト
となります。ここで大小比較になりますが
- (とHだと「H」のほうが大きい→「(WIDE)LEDシーリングライト」はBETWEENの範囲に含まれない
- HとHIだと「Hのほうが小さい」→「HIGHPOWER_LED_ハンディライト2」はBETWEENの範囲に含まれる
- LAとLEだと「LE」のほうが大きい→「LANTERN」はBETWEENの範囲に含まれる
- LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」ははBETWEENの範囲に含まれない
のです。

ここは実際にSQL使って確認すると、Oracleが文字の大小をどう判断しているのかがわかります。
# sqlplus pingt/oracle@XE

SQL*Plus: Release 11.2.0.2.0 Production on 金 5月 15 21:52:56 2020

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT CASE
WHEN 'H' > '(' THEN 'LOWER'
WHEN 'H' < '(' THEN 'HIGHER'
END RESULT
FROM DUAL;  2    3    4    5

RESULT
------
LOWER ← 「H」より「(」は小さい

SQL> SELECT CASE
WHEN 'H' > 'HI' THEN 'LOWER'
WHEN 'H' < 'HI' THEN 'HIGHER'
END RESULT
FROM DUAL;  2    3    4    5

RESULT
------
HIGHER ← 「H」より「HI」は大きい

SQL> SELECT CASE
WHEN 'LE' > 'HI' THEN 'LOWER'
WHEN 'LE' < 'HI' THEN 'HIGHER'
END RESULT
FROM DUAL;  2    3    4    5

RESULT
------
LOWER ← 「LE」より「HI」は小さい

SQL> SELECT CASE
WHEN 'LE' > 'LANTERN' THEN 'LOWER'
WHEN 'LE' < 'LANTERN' THEN 'HIGHER'
END RESULT
FROM DUAL;  2    3    4    5

RESULT
------
LOWER ← 「LE」より「LANTERN」は小さい

SQL> SELECT CASE
WHEN 'LE' > 'LED' THEN 'LOWER'
WHEN 'LE' < 'LED' THEN 'HIGHER'
END RESULT
FROM DUAL;  2    3    4    5

RESULT
------
HIGHER ← 「LE」より「LED」は大きい

投稿ツリー

  >フォーラム検索へ


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