我正在查看 SAP 数据服务 (BODS) 中的数据流。表 (WORKCODE) 中的“Reg”列之一具有双值(例如 8.33E-02)。谁能解释一下下面的表达式以及下面表达式中“索引”的功能是什么:
substr(WORKCODES.Reg, 1, (index (upper ( WORKCODES.Reg ),'E',1 )-1 ) )
我正在查看 SAP 数据服务 (BODS) 中的数据流。表 (WORKCODE) 中的“Reg”列之一具有双值(例如 8.33E-02)。谁能解释一下下面的表达式以及下面表达式中“索引”的功能是什么:
substr(WORKCODES.Reg, 1, (index (upper ( WORKCODES.Reg ),'E',1 )-1 ) )
我刚刚看到您的帖子,因为我正在寻找有关 BODS 中索引功能的信息。index 函数返回字符串值中字符的位置。等效的 sql 函数是 INSTR。
在您的示例中(例如 8.33E-02):
SUBSTR( '8.33E-02', 1, INDEX ( '8.33E-02', 'E', 1)-1 )
==>INDEX ( '8.33E-02', 'E', 1)
将返回从位置 1 开始的字母“E”的位置。它应该是 5。
然后你使用SUBSTR
函数来提取你的号码的第一部分:
SUBSTR( String Value, Start Pos, End Pos )
SUBSTR( '8.33E-02', 1, INDEX ( '8.33E-02', 'E', 1)-1 )
SUBSTR( '8.33E-02', 1, 5-1 )
您在“E”的位置减去 1 以保留第一部分!
回答永远都不晚!=)
SQL等价物:
SELECT SUBSTR( '8.33E-02', 1, INSTR ( '8.33E-02', 'E')-1 )
, INSTR ( '8.33E-02', 'E')
FROM DUAL
味道
刚刚看到这个并想如果其他人来这里让我们谈谈整个声明:
substr(WORKCODES.Reg, 1, (index (upper (WORKCODES.Reg),'E',1)-1))
让我们由内而外地处理它,并从对变量 WORKCODES.Reg 的第二个引用开始:
(索引 (上 ( WORKCODES.Reg ),'E',1 )-1)
upper 是一个使变量全部大写的函数。这样做是因为它引用了字母“E”。小写“e”将转换为“E”。
接下来是索引功能。index 函数将返回逗号后第一次出现的字符串的位置编号,在本例中为字母“E”。它将从位置 1 开始计数,这就是最后一个逗号后的 1 的用途。所以让我们说这个词是“树”。这部分会将单词大写为“TREE”,然后从第一个位置开始计数到字母“E”的第一次出现,这将是 3。现在 -1 将返回该数字为 2。
因此,我们将语句的那部分更改为 2:
substr(WORKCODES.Reg, 1, 2)
现在它正在寻找变量 WORKCODES.Reg 从位置 1 开始的子字符串(这就是数字 1 的含义),持续 2 个字符。
所以对于单词树,答案是 tr
无论出于何种原因,写这篇文章的人都想要字母 e 第一次出现之前的所有字符。