Netezza SQL扫描功能

时间:2015-05-14 19:49:38

标签: sql netezza

问题是我有一个带有标识符列的表 - 是分开的 (列值的示例可以是:TOM-XYZ12356-DIM34345-TE123456 要么 TOM-XYZR3455667AB-RXB75855-RYB434553)

我主要关注的是尝试提取标识符的第二部分。在上面的例子中,它将是(XYZ12356和XYZR3455667AB)。我在下面尝试了一些简单的方法,但不断收到错误"属性' - '找不到"

SELECT substr(identifier,1,Charindex("-",identifier) -1)
FROM TableA

也许我没有正确指定起点或者我没有使用正确的功能。我可以使用Charindex以外的其他功能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用SUBSTR和INSTR来获得所需的结果。

select * from tableA;
              COL1
--------------------------------
 TOM-XYZ12356-DIM34345-TE123456
(1 row)

SUBSTR正如您所期望的那样工作(虽然看起来您的参数不正常)并且您可以使用INSTR在第一个' - '之后提供起始字符,然后通过减去第一个的位置来计算SUBSTR长度' - '来自第二个' - '的位置。

SELECT SUBSTR(col1, instr(col1,'-',1,1)+1 , instr(col1,'-',1,2) - instr(col1,'-',1,1) -1 )
FROM tableA;

  SUBSTR
----------
 XYZ12356
(1 row)

检查SUBSTR and INSTR here

的语法

答案 1 :(得分:0)

如果您想要的只是选择标识符的第二部分,这会有效吗?

select substr(('TOM - XYZ12356 - DIM34345 - TE123456'), 6, 9)

结果只是第二部分:  'XYZ12356'