[SQL] 값이 숫자는 MySQL의에있는 경우 감지
SQL값이 숫자는 MySQL의에있는 경우 감지
값이 MySQL의 쿼리의 숫자 인 경우 감지 할 수있는 방법이 있나요? 등
SELECT *
FROM myTable
WHERE isANumber(col1) = true
해결법
-
==============================
1.이것은 대부분의 경우에 작동합니다.
이것은 대부분의 경우에 작동합니다.
SELECT * FROM myTable WHERE concat('',col1 * 1) = col1
이 같은 표준이 아닌 번호를 작동하지 않습니다
-
==============================
2.당신도 정규 표현식을 사용할 수 있습니다 ...이처럼 될 것입니다 :
당신도 정규 표현식을 사용할 수 있습니다 ...이처럼 될 것입니다 :
SELECT * FROM myTable WHERE col1 REGEXP '^[0-9]+$';
참고: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
-
==============================
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.이 답변은 드미트리 비슷하지만 소수뿐만 아니라 양수와 음수를 허용합니다.
이 답변은 드미트리 비슷하지만 소수뿐만 아니라 양수와 음수를 허용합니다.
select * from table where col1 REGEXP '^[[:digit:]]+$'
-
==============================
5.숫자 행을 반환
숫자 행을 반환
나는 다음과 같은 쿼리 솔루션을 발견하고 나를 위해 작동합니다 :
SELECT * FROM myTable WHERE col1 > 0;
오직 제로보다 큰 번호 열 COL1 것을 가진이 쿼리 반환 행
숫자가 아닌 행을 반환
당신은 트릭이 하나를 시도 숫자하지 열을 확인하려는 경우 (COL1> 0!)
SELECT * FROM myTable WHERE !col1 > 0;
-
==============================
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.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.내 컴퓨터에 정규 표현식보다 빠른 것 같다 또 다른 대안이다
내 컴퓨터에 정규 표현식보다 빠른 것 같다 또 다른 대안이다
SELECT * FROM myTable WHERE col1*0 != col1;
COL1 숫자 값으로 시작하는 곳은 모든 행을 선택합니다.
-
==============================
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.내가 추천 : 검색은 간단합니다, 당신은`사용할 수 있습니다
내가 추천 : 검색은 간단합니다, 당신은`사용할 수 있습니다
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.
SELECT * FROM myTable WHERE sign (col1)!=0
당연히 기호 (0)는 0이지만, 당신은 당신을 쿼리 제한 할 수 ...
SELECT * FROM myTable WHERE sign (col1)!=0 or col1=0
-
==============================
12.
SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")
-
==============================
13.나는 이것이 아주 잘 작동하는 것을 발견했다
나는 이것이 아주 잘 작동하는 것을 발견했다
if(col1/col1= 1,'number',col1) AS myInfo
-
==============================
14.시도 나누 / 1
시도 나누 / 1
select if(value/1>0 or value=0,'its a number', 'its not a number') from table
from https://stackoverflow.com/questions/5064977/detect-if-value-is-number-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : GROUP BY 절에 쉼표로 구분 된 값을 얻을 [중복] (0) | 2020.03.23 |
---|---|
[SQL] MySQL의에서 "전체 단어 일치"검색 (0) | 2020.03.23 |
[SQL] MySQL의 - 조건부 외래 키 제약 조건 (0) | 2020.03.23 |
[SQL] 어떻게 포스트 그레스에서 CSV 파일의 값으로 선택된 행을 업데이트? (0) | 2020.03.23 |
[SQL] 테이블 변수에 인덱스를 생성 (0) | 2020.03.23 |