복붙노트

[SQL] MySQL은 - 어떻게 "0"전면 패드의 우편 번호에?

SQL

MySQL은 - 어떻게 "0"전면 패드의 우편 번호에?

내 MySQL의 InnoDB의 데이터베이스에서, 나는 정리할 더러운 우편 번호 데이터가 있습니다.

나는 우편 번호 (예 : "90210")에 대한 모든 5 개 자리가있을 때 깨끗한 우편 번호 데이터입니다.

그러나 어떤 이유로, 나는 "0"로 시작하는 우편 코드를 들면, 0이 삭제 된 것을 내 데이터베이스에 나타났습니다.

그래서 "홀 츠빌, 뉴욕은"우편 번호 "00544"를 "544"로 내 데이터베이스에 저장됩니다

우편 번호와 "데드 햄, MA", "02026"은 "2026"로 내 데이터베이스에 저장됩니다.

나는 길이가 5 자리 숫자가 아닌 임의의 우편 번호에 앞 패드 "0"에 어떤 SQL을 실행할 수 있습니까? 우편 번호 또는 길이가 3 자리 숫자 앞에 패드 "00"의 경우, 의미한다. 우편 번호 또는 길이가 4 자리 숫자, 전면 패드의 경우 그냥 "0".

최신 정보:

난 단지로 우편 번호를 변경 데이터 유형 VARCHAR (5)

해결법

  1. ==============================

    1.CHAR (5) 대신 숫자 유형으로 된 우편 번호를 저장, 또는 당신은 DB에서로드 할 때 제로 사용하여 응용 프로그램 패드를 가지고있다. 방법이 ()의 sprintf를 사용하여 PHP와 함께 할 수 있습니다 :

    CHAR (5) 대신 숫자 유형으로 된 우편 번호를 저장, 또는 당신은 DB에서로드 할 때 제로 사용하여 응용 프로그램 패드를 가지고있다. 방법이 ()의 sprintf를 사용하여 PHP와 함께 할 수 있습니다 :

    echo sprintf("%05d", 205); // prints 00205
    echo sprintf("%05d", 1492); // prints 01492
    

    또는 당신은 LPAD ()와 당신을 위해 MySQL의 패드를 할 수 :

    SELECT LPAD(zip, 5, '0') as zipcode FROM table;
    

    다음 갱신 패드 모든 행에 대한 방법이있다 :

    ALTER TABLE `table` CHANGE `zip` `zip` CHAR(5); #changes type
    UPDATE table SET `zip`=LPAD(`zip`, 5, '0'); #pads everything
    
  2. ==============================

    2.당신은 (나는 5 자 이상이어야합니다 생각) 우편 번호의 길이를 결정해야합니다. 그럼 당신은 제로 채우기에 숫자를 MySQL을 말할 필요가있다.

    당신은 (나는 5 자 이상이어야합니다 생각) 우편 번호의 길이를 결정해야합니다. 그럼 당신은 제로 채우기에 숫자를 MySQL을 말할 필요가있다.

    이제 테이블이 MYTABLE이라고 문제의 필드가 우편 번호를 입력 SMALLINT입니다 가정하자. 다음과 같은 쿼리를 실행해야합니다

    ALTER TABLE mytable CHANGE `zipcode` `zipcode`
        MEDIUMINT( 5 ) UNSIGNED ZEROFILL NOT NULL;
    

    이 방법의 장점이있다 당신이 데이터를 선택 사용 기능에 필요가 없습니다 당신은 항상 여분의 0을 제거하거나 필드 길이를 증가시킬 수 있음을, 데이터 삽입 / 업데이트시 사용 트리거 할 필요가 없습니다, 그것은 당신의 데이터가 그대로 둔다는 점입니다 당신은 당신의 마음을 변경해야합니다.

  3. ==============================

    3.좋아, 그래서 당신은 VARCHAR (5) Number에서 열을 전환했습니다. 지금 당신은 왼쪽 패딩하기 위해 우편 번호 필드를 업데이트해야합니다. 는 SQL은 될 것이라고해야 할 일 :

    좋아, 그래서 당신은 VARCHAR (5) Number에서 열을 전환했습니다. 지금 당신은 왼쪽 패딩하기 위해 우편 번호 필드를 업데이트해야합니다. 는 SQL은 될 것이라고해야 할 일 :

    UPDATE MyTable
    SET ZipCode = LPAD( ZipCode, 5, '0' );
    

    이 의지 패드 5 자에 대한 우편 번호 열의 모든 값을 추가, '왼쪽에 0의.

    물론, 지금은 고정 된 기존의 모든 데이터를 가지고, 당신은 확실히 당신의 새로운 데이터는 제로 패딩임을 확인해야합니다. 그렇게하는 올바른 방법에 대한 생각의 여러 학교가 있습니다

    이 경우, 나는 응용 프로그램 수준 (전혀 경우), 그리고 데이터베이스 수준에서 그것을 처리 할 것입니다. (심지어 미국 - 우리의 된 우편 번호가 실제로 우편 번호 + 4 + 2이다 : 여기서, nnnnn-NNNN-NN) 결국, 모든 국가는 5 자리 우편 번호를 사용하고 일부는 문자뿐만 아니라 숫자를 할 수 있습니다. 더 나은 그것의 형식이 예상 꽤 어떤 경우에도 시도하고 데이터 형식을 강제하고 올바른 값을 입력하지 못하도록하는 것보다, 가끔 데이터 오류에 동의 할 수 없습니다.

  4. ==============================

    4.나는이 잘 OP 후에 알고있다. 당신이 그와 함께 갈 수있는 한 가지 방법은 서명되지 않은 INT로 우편 번호 데이터를 저장하는 테이블을 유지 있지만이 같은 다음에 제로 표시됩니다. 테이블에서 우편 번호 등 LPAD (캐스트 문자 등 (zipcode_int), (5), '0')을 선택; 이 보존하면서 원래의 INT와 같은 데이터는 서버가 당신을 위해 CHAR 변환에 INT를 수행 낳게 될 것이다 저장 장치에 일부 공간을 절약 할 수 있습니다. 이것은보기에 던져 질 수 있고,이 데이터를 필요로하는 사람은 테이블 자체 대가 지시 할 수있다.

    나는이 잘 OP 후에 알고있다. 당신이 그와 함께 갈 수있는 한 가지 방법은 서명되지 않은 INT로 우편 번호 데이터를 저장하는 테이블을 유지 있지만이 같은 다음에 제로 표시됩니다. 테이블에서 우편 번호 등 LPAD (캐스트 문자 등 (zipcode_int), (5), '0')을 선택; 이 보존하면서 원래의 INT와 같은 데이터는 서버가 당신을 위해 CHAR 변환에 INT를 수행 낳게 될 것이다 저장 장치에 일부 공간을 절약 할 수 있습니다. 이것은보기에 던져 질 수 있고,이 데이터를 필요로하는 사람은 테이블 자체 대가 지시 할 수있다.

  5. ==============================

    5.그것은 여전히 ​​zerofilled 부호없는 정수 필드로 우편 번호 필드를 만드는 데 의미가있다.

    그것은 여전히 ​​zerofilled 부호없는 정수 필드로 우편 번호 필드를 만드는 데 의미가있다.

    (표 XXX를 CREATE 우편 번호 INT (5) ZEROFILL UNSIGNED, ... )

    그 방법의 MySQL은 당신을 위해 패딩 처리합니다.

  6. ==============================

    6.

    CHAR(5)
    

    또는

    MEDIUMINT (5) UNSIGNED ZEROFILL
    

    첫 번째는 우편 번호 당 5 바이트를합니다.

    두 번째는 우편 번호 당 3 바이트를합니다. ZEROFILL 옵션은 0을 선두에 추가해, 우편 코드가 필요합니다.

  7. ==============================

    7.당신은 당신의 테이블 구조에 UNSIGNED ZEROFILL을 사용해야합니다.

    당신은 당신의 테이블 구조에 UNSIGNED ZEROFILL을 사용해야합니다.

  8. ==============================

    8.이 남은 바이트 공백을 두지 않는 LPAD는 VARCHAR2와 함께 작동합니다. LPAD는 남은 / 널 바이트 제로 LHS에 변경 SO 데이터 형식 VARCHAR2해야

    이 남은 바이트 공백을 두지 않는 LPAD는 VARCHAR2와 함께 작동합니다. LPAD는 남은 / 널 바이트 제로 LHS에 변경 SO 데이터 형식 VARCHAR2해야

  9. from https://stackoverflow.com/questions/3200754/mysql-how-to-front-pad-zip-code-with-0 by cc-by-sa and MIT license