2014-12-04 41 views
0

我一直在为此工作好几天,似乎无法解决这个问题。基本上我需要一个字段的返回数字,然后才有正斜杠。例如如果该字段是1234/TEXT,我想返回1234.我不能只使用左侧的字段名4,因为左侧的数字不同。 12345/TEXT,所以它必须是正斜杠的剩余部分。现在在MS Access的世界,它是这样的 - 它的工作DB2 SQL任何东西都剩下了/

Left(TABLE!FIELD,InStr(1,TABLE!FIELD,"/")-1) 

但是,我该如何转换这在IBM \ DB2系统中使用? DB2 SQL似乎与“普通”SQL有所不同。

谢谢!

+1

你打电话给MS Access“正常的SQL”?在普通的SQL中,您将表列引用为“TABLENAME.COLUMNNAME”,而不是“TABLE!FIELD”。 – mustaccio 2014-12-04 17:02:39

回答

0

比INSTR相反,也许LOCATE

LOCATE(字符,字符串)

char是搜索词 串正在通过结合SUBSTR LOCATE搜索

+0

'INSTR'函数在最近的DB2版本中可用。 – mustaccio 2014-12-04 17:03:48

0

你可以做到这一点的字符串;

Locate information

Substring information

作弊片(在这个例子中);

SUBSTRING('FIELD','START POSITION', 'LENGTH') 
LOCATE('SEARCH STRING', 'SOURCE STRING') 

SUBSTRING允许您从字符串中检索特定字符,即:

AFIELD = 'Hello' 
SUBSTRING(AFIELD,4,2) 

结果=“LO”(位置4和喂5)

LOCATE返回搜索字符串的第一个字符它发现为数字,即位置.;

AFIELD = 'Hello' 
LOCATE('ello', AFIELD) 

结果= 2(它开始在位置2)

所以,你可以结合这些做你想要什么,例如;

XTABLE有1列ACOL,其中有以下值;

123467/ABCD 
1321/ABDD 
1123467/ABCD 

要检索数字;

SELECT SUBSTRING(ACOL,1, LOCATE('/',ACOL)-1) 
FROM XRDK/XTABLE 

结果;

123467 
1321 
1123467 

我们在做什么?

SUBSTRING(
ACOL, 
1, 
LOCATE('/',ACOL)-1 
) 

SUBSTRING(
Field ACOL, 
Starting at position 1, 
Length; using locate set this to where I find a '/' and subtract 1 from the 
resulting postion (without the -1 you'd have the/on the end) 
) 
+0

刚刚注意到这是在2014年被问到的,哎呀 - 希望你最终解决了这个问题。 – RDKells 2017-12-14 16:57:18

相关问题