我正在使用Oracle,这些信息来自“HR.EMPLOYEES”表,但我不知道如何构建该查询。
答案 0 :(得分:5)
有几种方法可以实现您的目标。没有特别的顺序:
SUBSTR
只需使用SUBSTR
即可。此功能允许您从字符串中提取部件:
SELECT first_name FROM table WHERE SUBSTR(last_name, 2, 1) = 'o'
请记住,您只是将基于小写的行过滤为“o”,这与大写的“O”不同。而且,您还需要在列上创建function-based index
,以避免由performance issues
引起的任何FTS
。
如果您只有一列名称,请使用SUBSTR
中的INSTR
和SELECT
获取first_name
。我想把这个留给你。如果你真的与INSTR
斗争,请告诉我。提示您尝试自学,INSTR( string, substring [, start_position [, nth_appearance ] ] )
使用REGEXP_LIKE
可以实现同样的目的,但是,这将耗费大量资源:
SELECT first_name FROM table WHERE REGEXP_LIKE(last_name, '^.o')
在这里,我正在寻找一个字符串,如:
^
.
我有任何字符o
然后是 o LIKE
模式匹配此解决方案与数据库供应商无关:它将与(几乎?)任何RDBMS一起使用:
SELECT first_name FROM table WHERE last_name LIKE '_o%'
模式匹配或多或少类似于您可能在shell中使用的通配符。除了SQL _
用于任何字符,%
用于任何字符串(包括空字符串)。
通过搜索网络和各种Oracle文档,您可能会找到其他几种 - 或多或少的异国情调 - 选项。
例如,有人可能会想到在last_name
的第二个字母上使用虚拟列。
或者, 当且仅当 时,您需要不区分大小写的方法,您可以查看此演示http://lalitkumarb.wordpress.com/2014/01/22/oracle-case-insensitive-sorts-compares/。在开始复杂的事情之前,请确保你对上面提到的琐碎方面有最大的了解。