복붙노트

[SQL] 값이 숫자는 MySQL의에있는 경우 감지

SQL

값이 숫자는 MySQL의에있는 경우 감지

값이 MySQL의 쿼리의 숫자 인 경우 감지 할 수있는 방법이 있나요? 등

SELECT * 
FROM myTable 
WHERE isANumber(col1) = true

해결법

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

    1.이것은 대부분의 경우에 작동합니다.

    이것은 대부분의 경우에 작동합니다.

    SELECT * FROM myTable WHERE concat('',col1 * 1) = col1
    

    이 같은 표준이 아닌 번호를 작동하지 않습니다

  2. ==============================

    2.당신도 정규 표현식을 사용할 수 있습니다 ...이처럼 될 것입니다 :

    당신도 정규 표현식을 사용할 수 있습니다 ...이처럼 될 것입니다 :

    SELECT * FROM myTable WHERE col1 REGEXP '^[0-9]+$';
    

    참고: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

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

    3.데이터는 '테스트', '테스트', '시험 1111', '111 테스트', '111'인 경우

    데이터는 '테스트', '테스트', '시험 1111', '111 테스트', '111'인 경우

    데이터는 간단한 int이며 모든 레코드를 선택하려면 :

    SELECT * 
    FROM myTable 
    WHERE col1 REGEXP '^[0-9]+$';
    

    검색 결과 : '111'

    (정규식 ^ 수단은 시작 및 종료 $ 수단)

    정수 또는 소수가 존재하는 모든 레코드를 선택하려면 :

    SELECT * 
    FROM myTable 
    WHERE col1 REGEXP '^[0-9]+\\.?[0-9]*$'; - for 123.12
    

    결과 : (마지막 예와 동일) '111'

    마지막으로, 수있는 모든 레코드를 선택하려면 다음을 사용 :

    SELECT * 
    FROM myTable 
    WHERE col1 REGEXP '[0-9]+';
    

    결과 : "시험 '과'1111 시험 '과'111 일 '및'111 '

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

    4.이 답변은 드미트리 비슷하지만 소수뿐만 아니라 양수와 음수를 허용합니다.

    이 답변은 드미트리 비슷하지만 소수뿐만 아니라 양수와 음수를 허용합니다.

    select * from table where col1 REGEXP '^[[:digit:]]+$'
    
  5. ==============================

    5.숫자 행을 반환

    숫자 행을 반환

    나는 다음과 같은 쿼리 솔루션을 발견하고 나를 위해 작동합니다 :

    SELECT * FROM myTable WHERE col1 > 0;
    

    오직 제로보다 큰 번호 열 COL1 것을 가진이 쿼리 반환 행

    숫자가 아닌 행을 반환

    당신은 트릭이 하나를 시도 숫자하지 열을 확인하려는 경우 (COL1> 0!)

    SELECT * FROM myTable WHERE !col1 > 0;
    
  6. ==============================

    6.

    SELECT * FROM myTable
    WHERE col1 REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$'
    

    또한 서명 소수 일치합니다 (-1.2 같은, 0.2, 6, 2E9, 1.2E-10).

    테스트:

    drop table if exists myTable;
    create table myTable (col1 varchar(50));
    insert into myTable (col1) 
      values ('00.00'),('+1'),('.123'),('-.23e4'),('12.e-5'),('3.5e+6'),('a'),('e6'),('+e0');
    
    select 
      col1,
      col1 + 0 as casted,
      col1 REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$' as isNumeric
    from myTable;
    

    결과:

    col1   |  casted | isNumeric
    -------|---------|----------
    00.00  |       0 |         1
    +1     |       1 |         1
    .123   |   0.123 |         1
    -.23e4 |   -2300 |         1
    12.e-5 | 0.00012 |         1
    3.5e+6 | 3500000 |         1
    a      |       0 |         0
    e6     |       0 |         0
    +e0    |       0 |         0
    

    데모

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

    7.UDF를 (사용자 정의 함수)를 사용한다.

    UDF를 (사용자 정의 함수)를 사용한다.

    CREATE FUNCTION isnumber(inputValue VARCHAR(50))
      RETURNS INT
      BEGIN
        IF (inputValue REGEXP ('^[0-9]+$'))
        THEN
          RETURN 1;
        ELSE
          RETURN 0;
        END IF;
      END;
    

    그런 때 쿼리

    select isnumber('383XXXX') 
    

    --returns 0

    select isnumber('38333434') 
    

    --returns 1

    TABLEX 행 (mycol) mycol1, COL2, colx ISNUMBER을 선택; - 열 mycol1에 1과 0을 반환합니다

    알려줄까요는 등 소수, 과학적 표기법을 취할 수있는 기능을 향상시킬 수 있습니다 ...

    UDF를 사용하는 이점은 당신이 당신의 "where 절"비교의 왼쪽 또는 오른쪽에 사용할 수 있다는 것입니다. 이 크게 데이타베이스에 보내지기 전에 SQL을 단순화 :

     SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput');
    

    도움이 되었기를 바랍니다.

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

    8.내 컴퓨터에 정규 표현식보다 빠른 것 같다 또 다른 대안이다

    내 컴퓨터에 정규 표현식보다 빠른 것 같다 또 다른 대안이다

    SELECT * FROM myTable WHERE col1*0 != col1;
    

    COL1 숫자 값으로 시작하는 곳은 모든 행을 선택합니다.

  9. ==============================

    9.그럼에도 불구하고이 간단한 버전 누락 :

    그럼에도 불구하고이 간단한 버전 누락 :

    SELECT * FROM myTable WHERE `col1` + 0 = `col1`
    

    (또한 빠르게 증식과 같아야)

    더 재생 또는 느린 버전 :

    SELECT *, 
    CASE WHEN `col1` + 0 = `col1` THEN 1 ELSE 0 END AS `IS_NUMERIC` 
    FROM `myTable`
    HAVING `IS_NUMERIC` = 1
    
  10. ==============================

    10.내가 추천 : 검색은 간단합니다, 당신은`사용할 수 있습니다

    내가 추천 : 검색은 간단합니다, 당신은`사용할 수 있습니다

    column*1 = column
    

    `운영자 흥미 :) 작업은 빠르게 필드 VARCHAR / CHAR보다

    ABC*1 => 0 (NOT EQU **ABC**)
    AB15*A => 15 (NOT EQU **AB15**)
    15AB => 15 (NOT EQU **15AB**)
    15 => 15 (EQUALS TRUE **15**)
    
  11. ==============================

    11.

    SELECT * FROM myTable WHERE sign (col1)!=0
    

    당연히 기호 (0)는 0이지만, 당신은 당신을 쿼리 제한 할 수 ...

    SELECT * FROM myTable WHERE sign (col1)!=0 or col1=0
    
  12. ==============================

    12.

      SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")
    
  13. ==============================

    13.나는 이것이 아주 잘 작동하는 것을 발견했다

    나는 이것이 아주 잘 작동하는 것을 발견했다

    if(col1/col1= 1,'number',col1) AS myInfo
    
  14. ==============================

    14.시도 나누 / 1

    시도 나누 / 1

    select if(value/1>0 or value=0,'its a number', 'its not a number') from table
    
  15. from https://stackoverflow.com/questions/5064977/detect-if-value-is-number-in-mysql by cc-by-sa and MIT license