如何将此SAS代码转换为SQL Server代码?

时间:2018-08-30 19:05:25

标签: sql sas

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。

2 个答案:

答案 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)

FINDCCOUNTC函数基本上用于搜索字符并对其进行计数。

您可以在SQL中使用LIKE运算符来查找带有'%'和'_'通配符的字符

例如-

SELECT * FROM <table_name> WHERE <column_name> LIKE '%-%';

SELECT COUNT(*) FROM <table_name> WHERE <column_name> LIKE '%-%';

您也可以在LIKE运算符中使用正则表达式