选择first_name where last_name作为第二个字母'o'?

Cés*_*eva -4 sql oracle

我正在使用Oracle,这些信息来自"HR.EMPLOYEES"表,但我不知道如何构造该查询.

Lal*_*r B 5

有几种方法可以实现您的目标.没有特别的顺序:

运用 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.

如果你有一个名字只有一列,然后使用SUBSTRINSTRSELECT拿到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然后是o

使用LIKE模式匹配

这个解决方案与数据库供应商无关:它可以与(几乎?)任何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/.在开始复杂的事情之前,请确保你对上面提到的琐碎方面有最大的了解.

  • 您会更快地感受到该网站的哲学.. 就像我学到的那样.. :) 顺便说一句,这不是 substr(name,2,1) 吗? (2认同)