передача целого числа как типа данных VARCHAR () в запросе SQL из python - PullRequest
0 голосов
/ 24 января 2020

База данных, которую я использую (WRDS), в основном использует веб-форму для запросов, поэтому по этой причине первичные ключи в базе данных сохраняются как VARCHAR (6), несмотря на то, что они являются целыми числами.

enter image description here

Мой запрос выглядит следующим образом - select gvkey from comp.sec_dprc where gvkey in (12142, 12141, 12138, 1300, 1722, 12635, 12850, 3144);

Поскольку этот запрос является просто строкой, переданной функции в python, я не могу контролировать тип данных список ключей, поэтому они читаются как цифры c. Это означает, что мой запрос не находит совпадений.

Я хотел бы иметь возможность указать тип данных 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. Если есть какое-то решение, которого мне не хватает, я был бы абсолютно рад c найти его.

Cheers

Ответы [ 2 ]

1 голос
/ 24 января 2020

Если вы знаете, что значения являются числами, преобразуйте столбец в число:

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

Синтаксис и наилучший подход могут различаться в зависимости от базы данных, но идея та же .

Примечание. Вы можете получить ошибки преобразования, если ошибаетесь, если содержимое состоит только из цифр.

0 голосов
/ 24 января 2020

Почему бы не go в обратном порядке и указать внутри типов предложений IN быть VARCHAR ?. Попробуйте как:

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