在来自 python 的 SQL 查询中将整数作为 VARCHAR() 数据类型传递
Posted
技术标签:
【中文标题】在来自 python 的 SQL 查询中将整数作为 VARCHAR() 数据类型传递【英文标题】:passing integer as VARCHAR() datatype in an SQL query from python 【发布时间】:2020-05-10 20:25:46 【问题描述】:我使用的数据库(WRDS)主要使用网络表单进行查询,因此,尽管是整数,但数据库中的主键存储为 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 客户支持方面,我的成功率更低。如果有我缺少的解决方案,我会非常欣喜若狂地找到它。
干杯
【问题讨论】:
用您正在使用的数据库标记您的问题。还显示数据在表格中的样子。 【参考方案1】:如果您知道值是数字,则将 列 转换为数字:
where cast(gvkey as int) in (12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144)
语法和最佳方法可能因数据库而异,但想法是相同的。
注意:如果您错误地认为内容只是数字,则可能会出现转换错误。
【讨论】:
【参考方案2】:为什么不反其道而行之,将 IN 子句类型指定为 VARCHAR?试试看:
select gvkey from comp.sec_dprc where gvkey
in ('12142', '12141', '12138', '1300', '1722', '12635', '12850', '3144')
【讨论】:
一个很好的想法,但由于某种原因这不起作用......这是我尝试的第一件事以上是关于在来自 python 的 SQL 查询中将整数作为 VARCHAR() 数据类型传递的主要内容,如果未能解决你的问题,请参考以下文章
如何在 node.js 环境中将查询语句传递给 bigquery
如何在 SQL Server 2005 中将随机数作为列返回?