在来自 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

在Python中将sql查询存储为单个变量[重复]

如何在 SQL Server 2005 中将随机数作为列返回?

在python中将浮点数转换为整数的最安全方法?

在 Python 中将单个整数像素数组转换为 RGB 三元组

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?