在来自 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)
语法和最佳方法可能因数据库而异,但思路是一样的。
注意:如果您对内容只有数字有误,可能会出现转换错误。
我使用的数据库 (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)
语法和最佳方法可能因数据库而异,但思路是一样的。
注意:如果您对内容只有数字有误,可能会出现转换错误。