SQL (oracle):是否有与 substr 等效的数字字段?

jus*_*ess 3 sql oracle substring

要从oracle sql 中的字符串中检索位置 X 和 Y 之间的字符,我可以

substr(string_var, X, Y)
Run Code Online (Sandbox Code Playgroud)

如果我需要从位置 X 和 Y 之间的数字中获取数字怎么办?(即,如果我想要数字 123456 = 34 中的第三和第四位数字)

我知道我可以

substr(to_char(numeric_var), X, Y)
Run Code Online (Sandbox Code Playgroud)

但是如果我需要将输出视为数字呢?我必须做吗

to_number(substr(to_char(numeric_var), X, Y))
Run Code Online (Sandbox Code Playgroud)

或者是否有与 substr 等效的数字字段?

Joe*_*Joe 5

Oracle 会为你做类型转换:

with foo(bar) as 
 (select 123456 from dual union
  select 654321 from dual union
  select 434343 from dual)
select substr(bar,3,2),
       substr(bar,3,2) + 10
from foo;

SUBSTR(BAR,3,2)  SUBSTR(BAR,3,2)+10
---------------  ------------------
34               44
43               53
43               53
Run Code Online (Sandbox Code Playgroud)

  • 我不知道我应该感到惊讶还是震惊。 (4认同)
  • 这种方法的问题是它的行为会根据会话的 NLS 设置而改变。不要依赖隐式类型转换。 (2认同)