MySQL - 우편번호 앞에 "0"을 붙이는 방법
MySQL InnoDB 데이터베이스에 정리하고 싶은 지저분한 우편번호 데이터가 있습니다.
깨끗한 우편 번호 데이터는 우편 번호에 대한 5자리 숫자를 모두 가지고 있는 경우(예: "90210")입니다.
그러나 어떤 이유에서인지 데이터베이스에서 "0"으로 시작하는 zipcode의 경우 0이 삭제되어 있습니다.
그래서 우편번호가 붙은 "홀츠빌, 뉴욕"00544
제에 "아예"로 되어 있습니다544
그리고.
우편번호 "Dedham, MA"02026
제에 "아예"로 되어 있습니다2026
5자리 이외의 우편번호에 대해 전면 패드 "0"에서 실행할 수 있는 SQL은 무엇입니까?즉, 우편번호의 길이가 3자리일 경우 전면 패드 "00"이 됩니다.우편번호의 길이가 4자리일 경우 전면 패드는 "0"입니다.
갱신:
방금 우편번호를 데이터형 VARCHAR(5)로 변경했습니다.
zipcode를 숫자 유형이 아닌 CHAR(5)로 저장하거나 DB에서 로드할 때 응용 프로그램에서 0을 채우도록 하십시오.다음을 사용하여 PHP를 사용하는 방법:
echo sprintf("%05d", 205); // prints 00205
echo sprintf("%05d", 1492); // prints 01492
또는 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
우편번호의 길이(제 생각에 5글자)를 정하셔야 합니다.그런 다음 MySQL에 숫자를 0으로 채우도록 지시해야 합니다.
예를 들어, 당신의 테이블이렇게 불린다고 가정해봅시다mytable
는'입니다.zipcode
, syslogssmallint
. 하다
ALTER TABLE mytable CHANGE `zipcode` `zipcode`
MEDIUMINT( 5 ) UNSIGNED ZEROFILL NOT NULL;
하며 데이터 "/"/"의 경우 SELECT
데이터 및 추가 0을 제거하거나 필드 길이를 늘릴 수 있습니다.
좋습니다. 이제 열을 Number에서 VARCHAR(5)로 전환했습니다.이제 Zipcode 필드를 왼쪽 패드로 업데이트해야 합니다.이를 위한 SQL은 다음과 같습니다.
UPDATE MyTable
SET ZipCode = LPAD( ZipCode, 5, '0' );
그러면 ZipCode 열의 모든 값이 5자로 채워지고 왼쪽에 '0'이 추가됩니다.
물론 이전 데이터를 모두 수정했으므로 새로운 데이터도 모두 제로 패딩이 되도록 해야 합니다.이를 위한 올바른 방법에는 다음과 같은 여러 학파가 있습니다.
애플리케이션의 비즈니스 로직으로 처리합니다.장점: 데이터베이스에 대한 자세한 내용을 알 필요가 없는 데이터베이스에 의존하지 않는 솔루션.단점: 모든 응용 프로그램에서 데이터베이스에 쓰는 모든 위치에서 처리해야 합니다.
저장 프로시저로 처리합니다.장점:스토어드 프로시저는 모든 클라이언트에 대해 비즈니스 규칙을 적용합니다.단점:스토어드 프로시저는 단순한 INSERT/UPDATE 문보다 복잡하며 데이터베이스 간에 이식할 수 없습니다.INSERT/UPDATE를 사용해도 패드가 0이 아닌 데이터를 삽입할 수 있습니다.
방아쇠로 처리해장점:스토어드 프로시저 및 베어 INSERT/UPDATE 문장에서 작동합니다.단점:휴대성이 가장 낮은 솔루션.가장 느린 솔루션.방아쇠는 맞히기 어려울 수 있습니다.
이 경우 데이터베이스 레벨이 아닌 어플리케이션레벨로 처리하겠습니다.결국 모든 국가가 5자리 우편번호를 사용하는 것은 아닙니다(미국도 아닙니다.우리의 우편번호는 실제로는 Zip+4+2:nnn-nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn).데이터 형식이 예상과 다르더라도 다른 사용자가 올바른 값을 입력하지 못하도록 하는 것보다는 데이터 형식을 강제로 적용하거나 데이터 오류를 허용하지 않는 것이 좋습니다.
작전 이후인 거 알아테이블이 Zipcode 데이터를 부호 없는 INT 로 격납하고 있지만, 제로로 표시되는 경우는, 다음과 같습니다.
select LPAD(cast(zipcode_int as char), 5, '0') as zipcode from table;
이렇게 하면 원래 데이터가 INT로 유지되고 스토리지 공간이 절약되지만 INT에서 CHAR로 변환됩니다.이것은 뷰에 넣을 수 있으며, 이 데이터를 필요로 하는 사람은 테이블 자체보다 뷰로 이동할 수 있습니다.
우편 번호 필드를 제로필드의 부호 없는 정수 필드로 작성하는 것도 의미가 있습니다.
CREATE TABLE xxx ( zipcode INT(5) ZEROFILL UNSIGNED, ... )
그러면 mysql이 패딩을 처리해 줍니다.
CHAR(5)
또는
MEDIUMINT (5) UNSIGNED ZEROFILL
첫 번째는 우편번호당 5바이트입니다.
두 번째는 우편번호당 3바이트밖에 걸리지 않습니다.ZEROFILL 옵션은 선행 제로가 있는 우편 번호에 필요합니다.
를 사용해야 합니다.UNSIGNED ZEROFILL
테이블 구조에서 사용할 수 있습니다.
LPAD는 VARCHAR2와 함께 동작합니다.이는 남은 바이트에 공간을 할당하지 않기 때문입니다.LPAD가 LHS에서 남은 바이트/늘 바이트를 0으로 변경하므로 데이터 유형은 VARCHAR2여야 합니다.
언급URL : https://stackoverflow.com/questions/3200754/mysql-how-to-front-pad-zip-code-with-0
'source' 카테고리의 다른 글
Reactor에서 예외를 설정하는 올바른 방법 (0) | 2022.11.05 |
---|---|
포인터 투 포인트 슛은 C에서 어떻게 작동합니까? (그리고 언제 사용할 수 있습니까?) (0) | 2022.11.05 |
부울 필드를 인덱싱하면 성능이 향상됩니까? (0) | 2022.11.05 |
HTML 양식 숨김 요소를 사용하여 배열 전달 (0) | 2022.11.05 |
복잡한 v-if 문을 사용하지 않고 VueJ가 비동기 상태를 가져옵니다. (0) | 2022.11.05 |