숫자 필드가있는 DB가 있고 모든 행을 검색하고 비 정수만 반환해야합니다.SQL 비 숫자의 숫자 필드 검색
나는 쿼리 아래 시도하고 당신이하지 번호 만 문자 필드와 마찬가지로 사용 (정수 또는 float) 할 수 있습니다 사람들을 0
SELECT
li.QTY
FROM
TABLE LI
WHERE
li.QTY like '%.%'
숫자 필드가있는 DB가 있고 모든 행을 검색하고 비 정수만 반환해야합니다.SQL 비 숫자의 숫자 필드 검색
나는 쿼리 아래 시도하고 당신이하지 번호 만 문자 필드와 마찬가지로 사용 (정수 또는 float) 할 수 있습니다 사람들을 0
SELECT
li.QTY
FROM
TABLE LI
WHERE
li.QTY like '%.%'
이 기록을 튜닝하는 유지합니다.
이 "정수는"당신은 0.0, 2.0, -5.0 등이 아닌 12.5, 0.67 다음이 할 수있는 의미에 의해 :
SELECT li.QTY
FROM TABLE LI
WHERE li.QTY != ROUND(li.QTY , 0)
;
(SQL-Server 용 : ROUND로 TRUNC 편집) 또한 바닥이나 천장 기능을 사용할 수 있습니다 : 그것은 하지 작업을 수행하는 이유
SELECT li.QTY
FROM TABLE LI
WHERE li.QTY != FLOOR(li.QTY)
;
** 전체 ** 이외의 ** 숫자를 제외하고이 정확한. '= '를'<>'로 바꾸면됩니다. 그는 'ROUND'와'CAST AS INT'를 사용하여 똑같은 논리를 할 수 있습니다 ... 어느 것이 가장 빠름을 알아 내십시오! – Matthew
십진수가있는 숫자 찾기 – djshortbus
예, thnx. ROUND와 CEILING 함수는 여기에서도 똑같이 작동합니다. CAST가 INT보다 빨라 졌는지, 아마도 그렇지 않은지 확실하지 않습니다. –
합니다. QTY가 숫자 열인 경우,이를 표시하거나 암시 적으로 varchar (암시 적으로 LIKE)로 변환하면 모든 숫자가 같은 소수 자릿수로 형 변환됩니다.
는 BIGINT이 SQL 문을with TBL(qty) as (select 1.1 union all select 3)
SELECT li.QTY FROM TBL LI WHERE li.QTY like '%.%'
출력
1.1
3.0 << this contains "." even if it does not need to
캐스트를 고려하고 그 다음에 다시 비교, 어떤 소수 떨어질 것이다.
SELECT li.QTY FROM TBL LI
WHERE li.QTY <> CAST(qty as bigint)
SELECT li.QTY, CONVERT(varchar, li.qty)
FROM TBL LI
WHERE li.QTY LIKE '%.%[^0]%'
+1 왜 그에게 'LIKE'가 여기에서 작동하지 않는지 설명해주세요. – Matthew
+1 당신은 나를 "빅틴에게 던지십시오"; – onedaywhen
--Most Def...Cast as an int...Save you from validation of anything. Especially for conversions of dates into a whole date since Microsoft does not like a round down date function.
--For example:
--For every 300 hours an employee works they receive 1 whole day of vacation
--partial days of vacation will not be counted
Declare
@SumHours as decimal(38,10),
@VacationValidation as int
Set @SumHours = 3121.30000000000000000000
Set @VacationValidation = 300
Select cast(((@SumHours)/(@VacationValidation)) as int)
Select day(((@SumHours)/(@VacationValidation))) -1
--without casting as an int, I would need to validated the Day function to make sure that I'm not
--offsetting a whole day by one day.
CAST 함수 작업을 사용해야합니다. http://stackoverflow.com/questions :
SELECT li.QTY FROM TABLE LI WHERE li.QTY != CAST(li.QTY AS INTEGER)
미안 해요, 난 그냥 '<>'당신의 열의에 이러한 방법을 적용 ... 내가 여기 exapmle – djshortbus
에서 제외 관련 질문은 VARCHAR 캐스팅/44046/truncate-not-round-decimal-places-in-sql-server – Matthew