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

SQL(oracle):数字字段是否有与substr等效的值?,sql,oracle,substring,Sql,Oracle,Substring,要从oracle sql中的字符串中检索位置X和Y之间的字符,我可以 substr(string_var, X, Y) 如果我需要从位置X和Y之间的数字中获取数字,该怎么办?(即,如果我想要数字123456=34中的第三位和第四位数字) 我知道我可以 substr(to_char(numeric_var), X, Y) 但是,如果我需要将输出作为一个数字来处理,该怎么办?我必须做什么 to_number(substr(to_char(numeric_var), X, Y)) 或者是否有与s

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

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

我知道我可以

substr(to_char(numeric_var), X, Y)
但是,如果我需要将输出作为一个数字来处理,该怎么办?我必须做什么

to_number(substr(to_char(numeric_var), X, Y))

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

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

没有与数字对应的
substr
函数。您对
substr(123.45,3,4)
有什么期望?我们只假设整数吗?你可以为它创建一个函数不,没有。(数字不包含部分数字;它们是数字。)您必须建立一个数字范围(例如,数字在123400和123499之间变化),或者转换为字符串并返回。在我的用例中,仅为整数。但是,我只是希望有一个to_number(substr)的缩写(to_char)(我不知道我是否应该感到惊讶或震惊)。这种方法存在一个问题,即其行为将根据会话的NLS设置而改变。不要依赖隐式类型转换。