在来自 python 的 SQL 查询中将整数作为 VARCHAR() 数据类型传递

passing integer as VARCHAR() datatype in an SQL query from python

我使用的数据库 (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 客户支持方面取得的成功甚至更少。如果有我所缺少的解决方案,我会非常高兴地找到它。

干杯

为什么不反其道而行之,将 IN 子句中的类型指定为 VARCHAR?。试一试:

select gvkey from comp.sec_dprc where gvkey 
in ('12142', '12141', '12138', '1300', '1722', '12635', '12850', '3144')

如果您知道值是数字,则将 转换为数字:

where cast(gvkey as int) in (12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144)

语法和最佳方法可能因数据库而异,但思路是一样的。

注意:如果您对内容只有数字有误,可能会出现转换错误。