【发布时间】:2018-08-30 19:05:24
【问题描述】:
SAS 代码:
data table1;
set table2;
_sep1 = findc(policynum,'/&,');
_count1 = countc(policynum,'/&,');
_sep2 = findc(policynum,'-');
_count2 = countc(policynum,'-');
_sep3 = findc(policynum,'_*');
_count3 = countc(policynum,'_*');
如何将其转换为如下的选择语句:
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 是:'character varying(50) not null'。
我正在使用 Aginity Workbench for Netezza 运行此程序。我相信这是 IBM。
【问题讨论】:
-
请编辑您的问题并提供(1)样本数据; (2) 期望的结果; (3) 逻辑说明。人们在解释事物方面比代码做得更好。
-
您好,欢迎来到该网站不幸的是,代码转换对于 Stack Overflow 来说是题外话。请尝试解决问题,然后提出与该尝试相关的问题。谢谢!
-
您使用的是什么 SQL 语言?功能和操作各不相同,因此您需要提供。不过,对于上下文,
FINDC只是查找这些字符,COUNTC计算这些字符。它返回/或&的第一个位置,因此您可能需要使用两个CHARINDEX 函数而不是一个,并取两者之间的最小值来找到最早出现的位置。可能有更适合的不同功能,但我们需要知道您的 RDBMS 才能回答这个问题。 -
我在标题中写到我正在使用SQL server。我在 Aginity Workbench (Netezza) 中运行它。
-
您能解释一下为什么该代码不起作用吗?它编译了吗? (如果没有,你得到了什么错误?)它运行了吗? (如果没有,你得到了什么错误?)它炸毁了你的电脑吗? (如果有,你有视频吗?)