SAS代码:
data table1;
set table2;
_sep1 = findc(policynum,'/&,');
_count1 = countc(policynum,'/&,');
_sep2 = findc(policynum,'-');
_count2 = countc(policynum,'-');
_sep3 = findc(policynum,'_*');
_count3 = countc(policynum,'_*');
如何将其转换为如下所示的select语句:
select
*,
/*Code converted to SQL from above*/
from table2
例如,我尝试了以下代码:
select
*,
charindex('/&,',policynum) as _sep1,
LEN(policynum) - LEN(REPLACE(policynum,'/&,','')) as _count1
from table2
但是我收到了错误42S02:函数'CHARINDEX(UNKNOWN,VARCHAR)'不存在。无法识别满足给定参数类型的函数。您可能需要添加显式的类型转换。
请注意,变量pol_no为:'字符变化(50)不为null'。
我正在使用Netezza的Aginity Workbench来运行它。我相信这是IBM。
答案 0 :(得分:1)
假设基于CHARINDEX()的Oracle,这可能有效: 您需要将其应用两次,每个字符一次,并用最少的次数找到第一个匹配项。 Oracle中可能有一个更合适的功能,但我还不足以提出建议。
select
*,
min(charindex('/',policynum), charindex('&', policynum)) as _sep1
from table2
编辑:基于OP注释。
Netezza好像是IBM,这意味着使用INSTR函数,而不是CHARINDEX。
select
*,
min(instr(policynum, '/'), instr(policynum, '&')) as _sep1
from table2
https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_2336.htm
答案 1 :(得分:0)
FINDC
和COUNTC
函数基本上用于搜索字符并对其进行计数。
您可以在SQL中使用LIKE
运算符来查找带有'%'和'_'通配符的字符
例如-
SELECT * FROM <table_name> WHERE <column_name> LIKE '%-%';
和
SELECT COUNT(*) FROM <table_name> WHERE <column_name> LIKE '%-%';
您也可以在LIKE
运算符中使用正则表达式