programing

문자와 숫자 사이에 0으로 값 채우기

linuxpc 2023. 8. 29. 20:10
반응형

문자와 숫자 사이에 0으로 값 채우기

우리는 몇 달 전까지 엑셀 목록에 재고가 있었습니다.이것은 수동으로 유지 관리되었습니다.인벤토리 번호는 다음과 같습니다.

PC1
PC80
PC560
PC1080

저는 MariaDB를 기반으로 하는 Snipe-IT라는 인벤토리 시스템으로 디렉토리를 이동했습니다.길이가 다른 재고 번호로 인해 검색이 제대로 작동하지 않습니다.예제 "PC"를 검색하고 자산 태그별로 내림차순으로 정렬하면 맨 위에 가장 높은 숫자가 있을 것입니다.하지만 맨 위에 PC999가 있습니다.따라서 각 재고 번호가 다음과 같이 나타나도록 데이터베이스를 조정해야 합니다.

PC000001
PC000080
PC000560
PC001080

안타깝게도 저는 SQL에 대한 경험이 많지 않습니다.접두사와 숫자 사이의 0을 적절하게 채우려면 어떻게 해야 합니까?

모든 것은 Apache2가 설치된 Ubuntu 21.04 시스템에 설치됩니다.

검색 결과

사용할 수 있습니다.LPAD동일한 길이의 식별자를 작성하려면,REGEXP_SUBSTRMySQL 8에서만 사용할 수 있습니다.

UPDATE table_name
SET column = CONCAT(REGEXP_SUBSTR(column, "[A-Z]+"), LPAD(REGEXP_SUBSTR(column,"[0-9]+"), 6, '0'))

테스트를 해본 적이 없습니다. 업데이트할 테이블을 복사하여 실제 실행하기 전에 제대로 작동하는지 확인하겠습니다.

ID가 될 재고 번호로 열을 업데이트합니다.

REGEXP_SUBSTR(column, "[A-Z]+")

그리고 그것을 제로 패딩 번호(항상 길이가 6자리여야 함)에 가입시킵니다.

LPAD(REGEXP_SUBSTR(column, "[0-9]+"), 6, '0')

접두사 부분인 경우(PC)는 항상 동일하므로 쉽게 사용할 수 있습니다. 식별자가 다를 것이라고 가정하지만 그렇지 않다면:

UPDATE table_name
SET column = CONCAT('PC', LPAD(REGEXP_SUBSTR(column, "[0-9]+"), 6, '0'))

MySQL 5.6에서는 시작 부분의 문자열이 항상 두 문자라고 가정합니다.

UPDATE table_name
SET column = CONCAT(LEFT(column , 2), LPAD(REPLACE(column, LEFT(column, 2), ''), 6, '0'))

여기서 쿼리 예제 선택 http://sqlfiddle.com/ #!9/8f3503/6

언급URL : https://stackoverflow.com/questions/71337912/fill-values-with-zeros-between-letters-and-numbers

반응형