使用随机字符创建Netezza / SQL ..temp表

时间:2015-07-27 15:46:20

标签: sql netezza

我确信有一种非常快捷的方式可以做到这一点,但我现在有点难过

有没有办法选择一堆字符,如('3232345','224225','234234234','533225')并将每个字符插入临时表的新行

我想把它们放到临时表中,并将它与我数据库中的另一个表进行比较。我试图从源excel文件中导入字符,但似乎我没有这样做的权限;所以我试着按如下方式创建临时表

with tablea as (
Select '3232345','224225','234234234','533225'
From testTable
)
Select * from tablea

我必须使用testTable;因为Netezza / Sql不喜欢没有后续的选择。上面的查询返回一个临时表,其值只有一行,我需要逗号分隔的值在不同的行中;如:

3232345
224225
234234234
533225

and not like  3232345,224225,234234234,533225

注意:我尝试查找row_number()函数,但我认为该函数需要在表中定义的特定列值。

对此事的任何帮助将不胜感激 非常感谢

2 个答案:

答案 0 :(得分:3)

这样做你想要的吗?

with tablea as (
    Select '3232345' as val from testTable union all
    Select '224225' from testTable union all
    Select '234234234' from testTable union all
    Select '533225' from testTable
)
 . . .

答案 1 :(得分:2)

INZA函数包含一个名为split_to_rows的样本UTDF,它可以做你想要的。

TESTDB.ADMIN(ADMIN)=>  select t.* from  table(split_to_rows('3232345,224225,234234234,533225', ',')) t;
 POS |    STR
-----+-----------
   1 | 3232345
   2 | 224225
   3 | 234234234
   4 | 533225
(4 rows)

如果安装了INZA功能,那么您(或您的管理员)可以将此UTDF安装到您的数据库中,如下所示:

[nz@netezza examples]$ cd /nz/extensions/nz/nzlua/examples
[nz@netezza examples]$ ls split_to_rows.nzl
split_to_rows.nzl
[nz@netezza examples]$ ../bin/nzl -d testdb split_to_rows.nzl

Compiling: split_to_rows.nzl
####################################################################
UdxName      =  split_to_rows
UdxType      =  UDTF
Arguments    =  VARCHAR(ANY),VARCHAR(ANY)
Result       =  TABLE(POS INTEGER,STR VARCHAR(255))
Dependencies =  INZA.INZA.LIBNZLUA_3_2_0
NZUDXCOMPILE OPTIONS: (--replbyval --unfenced --mem 2m --version 2)
CREATE FUNCTION
[nz@netezza examples]$