我正在使用的数据库(WRDS)主要使用Web表单进行查询,因此,尽管是整数,数据库中的主键仍存储为VARCHAR(6)。
我的查询看起来像这样-select gvkey from comp.sec_dprc where gvkey in (12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144);
由于此查询只是传递给python中的函数的字符串,所以我无法控制键列表的数据类型,因此它们被读取为数字。这意味着我的查询找不到任何匹配项。
我希望能够从查询中指定varchar(6)数据类型。我尝试过;
cast((12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144) as varchar(6)
和
(cast(12142 as varchar(6), cast(12141as varchar(6), cast(12138 as varchar(6), etc)
到目前为止,我还没有取得任何成功。我在WRDS客户支持方面取得的成功甚至更少。如果有我不知道的解决方案,我将为之欣喜若狂。
欢呼声
如果您知道值是数字,则将column转换为数字:
where cast(gvkey as int) in (12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144)
语法和最佳方法可能因数据库而异,但是思想是相同的。
注意:如果您对仅数字内容的输入有误,则会出现转换错误。
为什么不采取相反的方式,并在IN子句类型内部指定为VARCHAR?尝试像:
select gvkey from comp.sec_dprc where gvkey
in ('12142', '12141', '12138', '1300', '1722', '12635', '12850', '3144')