我有下面观察到的sql表列:
AB_191007_01
AB_190930_02
我想将此列转换为格式为yyyy-mm-dd的另一列中的日期。
proc sql;
CREATE TABLE result AS
SELECT input(compress(col_name,"AB_"), ANYDTDTE6.) AS col_date format=yymmdd6.
FROM work.test
;quit;
先前的代码使我有些奇怪的结果:
2009-06-18
1926-12-17
1926-12-17
2009-06-18
2006-08-18
2016-05-18
2011-03-19
1926-12-17
[假设您要将字符AB_191007_01转换为日期2019-10-07,请使用SCAN函数获取下划线之间的中间日期,然后输入yymmdd6。然后,您可以根据需要更改格式(我使用yymmdd10。)。
SELECT input(scan(col_name,2,"_"),yymmdd6.) AS col_date format yymmdd10.
ANYDTDTE
信息格式取决于您的DATESTYLE
选项(这又取决于LOCALE
),因此您应该指定它或使用其他固定位置的信息格式,例如yymmdd6
。YEARCUTOFF
选项。compress()
函数还会压缩第二个_,因此向input()
提供的字符比预期的多(尽管它不会影响.6格式)。