2009-08-20 5 views
0

Python을 사용하고 컬럼에서 09를 선택하기 위해 SELECT 문을 MYSQL에 수행 할 때 0은 삭제되고 9 만 인쇄됩니다.파이썬 - MYSQL - 선행 0 선택

앞에 오는 0을 포함하여 모든 숫자를 가져 오는 방법이 있습니까?

+0

컬럼의 데이터 유형은 무엇인가에 주어진 varchar이 문제가있다 주조로 CAST (ur_field AS CHAR(2))을 사용할 수 있나요? 텍스트 열 (varchar) 또는 실제 숫자 열 (정수, 소수점, ...)입니까? 값이 어떻게 출력되는지에 관한 문제라면 * "% 04d"% (value_of_column,) * – Dirk

+0

과 같은 Python의 * % * 연산자를 사용할 수 있습니다. 열 유형은 tinyint입니다. PHP를 사용하여 테이블에서 선택하는 경우 제로가됩니다. –

답변

3

질의, 테이블 정의 또는 열이 숫자라고 생각하고 결과를 정수로 변환하는 사용중인 ORM에는 거의 확실한 것이 있습니다. 선행 0을 보존하려면 열을 문자열 (모든 곳!)로 정의해야합니다.

편집 : 서버의 ZEROFILL은 잘라내지 않습니다. 파이썬은 정수형 컬럼을 파이썬 정수로 취급하며, 그것들은 앞에 오는 0을 가지지 않는다. 열 유형을 VARCHAR으로 변경하거나 Python에서 "%02d" % val과 같은 것을 사용하거나 CAST(my_column AS VARCHAR)을 쿼리에 넣어야합니다.

0

열의 데이터 유형은 무엇입니까? 앞에 오는 0을 유지하려면 VARCHAR과 같은 숫자가 아닌 열 유형을 사용해야합니다.

>>> print "%02d" % (1,) 
01 
+0

열 유형은 tinyint입니다. PHP를 사용하여 테이블에서 선택하면 앞에 0이 표시됩니다. –

+0

PHP 버그처럼 들립니다. 숫자 앞에 0이 없어야합니다. –

3

MySQL은 열 정의에서이 작업을 지원합니다 : 당신은을 통해 해당 컬럼에 각 쿼리를 실행할 수

CREATE TABLE MyTable (
    i TINYINT(2) ZEROFILL 
); 

INSERT INTO MyTable (i) VALUES (9); 

SELECT * FROM MyTable; 

+------+ 
| i | 
+------+ 
| 09 | 
+------+ 
+0

예. 선행 제로는 테이블에 있지만 파이썬의 select 및 print 문에는 없습니다. –

0

파이썬에서 0이 붙는 형식 번호를

, 형식 지정자를 사용 다음과 같은 함수 :

if len(str(number)) == 1: number = "0" + str(number) 

이렇게하면 숫자가 문자열로 캐스트되지만 알아요, 파이썬은 숫자 데이터 타입에서 선행 0을 허용하지 않습니다. 내가 틀렸다면 누군가가 나를 바로 잡습니다.

편집 : John Millikin의 대답은 이것과 똑같은 일을하지만 더 효율적입니다. 형식 지정자에 대해 가르쳐 주셔서 감사합니다!