반응형
예를 들어, 이와 같은 데이터를 저장하는 열이 있습니다.
Apple
12.5.126.40
Smite
Abby
127.0.0.1
56.5.4.8
9876543210
Notes
IP 형식의 데이터가있는 행만 선택하는 방법은 무엇입니까?
'^ [0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \. [0-9]로 시도했습니다. {1,3} $ '
하지만 왜 9876543210과 일치하는지 모르겠습니다.
해결 방법
IP 주소가 점으로 구분 된 쿼드 패턴과 일치하려면 REGEX
를 사용해야합니다.
SELECT *
FROM yourtable
WHERE
thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
기술적으로 이것은 999.999.999.999
와 같이 유효한 IP 주소가 아닌 값과 일치하지만 중요하지 않을 수 있습니다. 중요한 것은 데이터를 수정하여 IP 주소가 여기에있는 다른 데이터와 분리 된 자체 열에 저장되도록하는 것입니다. 하나의 열에 데이터 유형을 혼합하는 것은 거의 항상 나쁜 생각입니다.
mysql> SELECT '9876543210' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';
+---------------------------------------------------------------------------+
| '9876543210' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$' |
+---------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT '987.654.321.0' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';
+------------------------------------------------------------------------------+
| '987.654.321.0' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$' |
+------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------+
이 방법은 정규 표현식보다 더 효율적입니다.
다음과 같은 WHERE
조건에 삽입 할 수 있습니다. WHERE INET_ATON (thecolumn) IS NOT NULL
SELECT INET_ATON('127.0.0.1');
+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
| 2130706433 |
+------------------------+
SELECT INET_ATON('notes');
+--------------------+
| INET_ATON('notes') |
+--------------------+
| NULL |
+--------------------+
SELECT INET_ATON('56.99.9999.44');
+----------------------------+
| INET_ATON('56.99.9999.44') |
+----------------------------+
| NULL |
+----------------------------+
참조 페이지 https://stackoverflow.com/questions/14699056
반응형
'MySql' 카테고리의 다른 글
MySQL mysqli로 총 행 수를 얻는 방법 (0) | 2021.01.13 |
---|---|
MySQL 따옴표와 줄 바꿈이있는 문자열을 Python으로 sqlite db에 삽입하는 방법은 무엇입니까? (0) | 2021.01.13 |
MySQL 텍스트 상자를 보이지 않거나 읽기 전용으로 만들기 (0) | 2021.01.13 |
MySQL mysql 테이블의 필드 수 가져 오기 (0) | 2021.01.13 |
MySQL 프로 시저 / 함수를 사용하지 않고 MySQL에서 루프를 실행할 수 있습니까? (0) | 2021.01.12 |
댓글