Oracle 中的字符串比较 SQL
String comparision in Oracle SQL
select * from employees
where last_name between 'A' AND 'E';
为什么直到 'D' 才得到答案而不是 'E',有没有其他方法可以获取详细信息
您的命令非常适合 "employees whose names are (not start with) from A to E"。 "E"
会在。"Einstein"
会被淘汰,因为它 比 "E"
晚 。
WHERE last_name >= 'A' AND last_name < 'F'
给你想要的。
或者,您可以这样做
WHERE SUBSTR(last_name, 1, 1) BETWEEN 'A' AND 'E'
但它会很慢,因为它无法使用索引。
where last_name between 'A' AND 'E';
字符串比较与比较数字不相似。
字符串比较是在它们的 ASCII 值上完成的。因此,您将 last_name 的 ASCII 值与 单个字符 进行比较,这不会给出您想要的输出。
SQL> SELECT ename, ASCII(ename), ASCII('A'), ASCII('E') FROM emp;
ENAME ASCII(ENAME) ASCII('A') ASCII('E')
---------- ------------ ---------- ----------
SMITH 83 65 69
ALLEN 65 65 69
WARD 87 65 69
JONES 74 65 69
MARTIN 77 65 69
BLAKE 66 65 69
CLARK 67 65 69
SCOTT 83 65 69
KING 75 65 69
TURNER 84 65 69
ADAMS 65 65 69
JAMES 74 65 69
FORD 70 65 69
MILLER 77 65 69
14 rows selected.
SQL>
基于上面的 ASCII 值,您将只获得那些在 65
和 [=14] 之间具有 ename
ASCII 值的行=].
需要先用SUBSTR提取last_name的第一个字符,与'A'
、'E'
进行比较。
例如,我在 SCOTT 架构中使用标准 emp
table,并添加两行 ename 以 'D'
和 'E'
开头的行。
SQL> WITH DATA AS(
2 SELECT ename FROM emp
3 UNION
4 SELECT 'DAWSON' FROM DUAL
5 UNION
6 SELECT 'EINSTEIN' FROM DUAL
7 )
8 SELECT * FROM DATA
9 WHERE substr(ename,1,1) BETWEEN 'A' AND 'E';
ENAME
----------
ADAMS
ALLEN
BLAKE
CLARK
DAWSON
EINSTEIN
6 rows selected.
SELECT * FROM EMPLOYEES
WHERE Last_name Like 'A%'
OR Last_name Like 'E%';
这应该是答案....您编写的代码将准确显示 A 和 E 的名称....
select * from employees
where last_name between 'A' AND 'E';
为什么直到 'D' 才得到答案而不是 'E',有没有其他方法可以获取详细信息
您的命令非常适合 "employees whose names are (not start with) from A to E"。 "E"
会在。"Einstein"
会被淘汰,因为它 比 "E"
晚 。
WHERE last_name >= 'A' AND last_name < 'F'
给你想要的。
或者,您可以这样做
WHERE SUBSTR(last_name, 1, 1) BETWEEN 'A' AND 'E'
但它会很慢,因为它无法使用索引。
where last_name between 'A' AND 'E';
字符串比较与比较数字不相似。
字符串比较是在它们的 ASCII 值上完成的。因此,您将 last_name 的 ASCII 值与 单个字符 进行比较,这不会给出您想要的输出。
SQL> SELECT ename, ASCII(ename), ASCII('A'), ASCII('E') FROM emp;
ENAME ASCII(ENAME) ASCII('A') ASCII('E')
---------- ------------ ---------- ----------
SMITH 83 65 69
ALLEN 65 65 69
WARD 87 65 69
JONES 74 65 69
MARTIN 77 65 69
BLAKE 66 65 69
CLARK 67 65 69
SCOTT 83 65 69
KING 75 65 69
TURNER 84 65 69
ADAMS 65 65 69
JAMES 74 65 69
FORD 70 65 69
MILLER 77 65 69
14 rows selected.
SQL>
基于上面的 ASCII 值,您将只获得那些在 65
和 [=14] 之间具有 ename
ASCII 值的行=].
需要先用SUBSTR提取last_name的第一个字符,与'A'
、'E'
进行比较。
例如,我在 SCOTT 架构中使用标准 emp
table,并添加两行 ename 以 'D'
和 'E'
开头的行。
SQL> WITH DATA AS(
2 SELECT ename FROM emp
3 UNION
4 SELECT 'DAWSON' FROM DUAL
5 UNION
6 SELECT 'EINSTEIN' FROM DUAL
7 )
8 SELECT * FROM DATA
9 WHERE substr(ename,1,1) BETWEEN 'A' AND 'E';
ENAME
----------
ADAMS
ALLEN
BLAKE
CLARK
DAWSON
EINSTEIN
6 rows selected.
SELECT * FROM EMPLOYEES
WHERE Last_name Like 'A%'
OR Last_name Like 'E%';
这应该是答案....您编写的代码将准确显示 A 和 E 的名称....