数値フィールドを持つDBがあり、すべての行を検索して非整数のみを返す必要があります。SQL数値以外のフィールドの数値フィールドを検索
私は、以下のクエリを試してみましたが、それはあなたが数(整数または浮動小数点数)のものとchar型のフィールドではないとだけように使用することができます0
SELECT
li.QTY
FROM
TABLE LI
WHERE
li.QTY like '%.%'
数値フィールドを持つDBがあり、すべての行を検索して非整数のみを返す必要があります。SQL数値以外のフィールドの数値フィールドを検索
私は、以下のクエリを試してみましたが、それはあなたが数(整数または浮動小数点数)のものとchar型のフィールドではないとだけように使用することができます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を編集しました) また、床やCEILING関数を使用することができます。
SELECT li.QTY
FROM TABLE LI
WHERE li.QTY != FLOOR(li.QTY)
;
これは、**完全ではない**数値を必要とする点を除いて正しいです。単に '='を '<>'に切り替えてください。彼は 'ROUND'と' CAST AS INT'を使ってまったく同じロジックをすることができます...どちらが最速かを把握するだけです! – Matthew
10進数の数字を探します – djshortbus
はい、thnx。 ROUND関数とCEILING関数は同じように動作します。 INTとしてのCASTが高速で、おそらくそうではないかどうかはわかりません。 –
それはない作業を行いなぜ。 QTYが数値列である場合、その列を表示するか暗黙的にvarcharに変換すると(LIKEは暗黙的にそれを行います)、すべての数値が同じ小数点以下桁数にキャストされます。
は、この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
はBIGINTにキャストし、それが再びそれを比較、その後、任意の小数をドロップします。
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あなたは私を" bigintにキャスト "していた;) – 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 /切り捨て非小数点以下桁数 – Matthew