我确信有一种非常快捷的方式可以做到这一点,但我现在有点难过
有没有办法选择一堆字符,如('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()函数,但我认为该函数需要在表中定义的特定列值。
对此事的任何帮助将不胜感激 非常感谢
答案 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]$