我的输入表:
客户 | 记录 |
---|---|
0001 | YNNNYNYNNNNN |
0002 | NNNNNNNNNNNN |
0003 | YYNNYNYNYYNN |
0004 | 尼尼尼尼尼尼尼 |
查找所有以字母 Y 开头的记录的行的目标为:
客户 | 记录 |
---|---|
0001 | YNNNYNYNNNNN |
0003 | YYNNYNYNYYNN |
使用 %like 的一种解决方案是
SELECT *
FROM TABLE
WHERE Records LIKE 'Y_ _ _ _ _ _ _ _ _ _ _ _';
此解决方案仅在我知道所有记录具有相同长度时才有效。
我看到它有一个 SAS 标签,所以这里有一些 SAS 解决方案。
proc sql;
create table want as
select *
from snow.have
where records LIKE 'Y%'
;
quit;
数据步骤也将起作用:
data want;
set snow.have;
where records =: 'Y';
run;
或者:
data want;
set snow.have;
where substr(records, 1, 1) = 'Y';
run;
只需检查您的函数是否兼容,否则 SAS 会在运行代码之前将数据库中的所有内容拖到 SAS 服务器上。 这里是 Snowflake 中支持的 SAS 函数列表。
要确认它没有执行此操作,请使用以下 sastrace 选项:
options sastrace=',,,d' sastraceloc=saslog;
如果您在 SAS 日志中看到以下注释,则该功能不兼容。它将把它能传递的内容传递给数据库,然后完成剩下的事情。
ACCESS ENGINE: SQL statement was not passed to the DBMS, SAS will do the processing.
为了完全避免这种情况,您还可以使用 SQL 传递工具直接在 Snowflake 中运行 SQL。