我正在使用Oracle,这些信息来自"HR.EMPLOYEES"表,但我不知道如何构造该查询.
有几种方法可以实现您的目标.没有特别的顺序:
SUBSTR只是用SUBSTR.此函数允许您从字符串中提取部分:
SELECT first_name FROM table WHERE SUBSTR(last_name, 2, 1) = 'o'
Run Code Online (Sandbox Code Playgroud)
请记住,您只是将基于小写的行过滤为'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')
Run Code Online (Sandbox Code Playgroud)
在这里,我正在寻找一个字符串,如:
^ 字符串开始后.我有任何性格o然后是oLIKE模式匹配这个解决方案与数据库供应商无关:它可以与(几乎?)任何RDBMS一起使用:
SELECT first_name FROM table WHERE last_name LIKE '_o%'
Run Code Online (Sandbox Code Playgroud)
模式匹配或多或少类似于您可能在shell中使用的通配符.除了SQL _用于任何字符,%并用于任何字符串(包括空字符串).
通过搜索网络和各种Oracle文档,您可能会找到其他几个 - 或多或少的异国情调 - 选项.
例如,人们可能会想到在第二个字母上使用虚拟列last_name.
或者,当且仅当您需要不区分大小写的方法时,您可以查看此演示http://lalitkumarb.wordpress.com/2014/01/22/oracle-case-insensitive-sorts-compares/.在开始复杂的事情之前,请确保你对上面提到的琐碎方面有最大的了解.