これは単純な問題ですが、まだ解決策が得られていないと思います。ここで説明するように、列からのみ有効な数値を取得したいと思います。
次の値を持つvarchar列があるとしましょう
ABC
Italy
Apple
234.62
2:234:43:22
France
6435.23
2
Lions
ここでの問題は、数字のみを選択することです
select * from tbl where answer like '%[0-9]%'
はそれをしたはずですが、それは戻ります
234.62
2:234:43:22
6435.23
2
ここで、2:234:43:22は有効な数値ではないため、明らかに望ましくありません。
望ましい結果は
234.62
6435.23
2
これを行う方法はありますか?
これを試すことができます
ISNUMERICは、入力式が有効な数値データ型に評価されると1を返します。それ以外の場合は0を返します。
DECLARE @Table TABLE(
Col VARCHAR(50)
)
INSERT INTO @Table SELECT 'ABC'
INSERT INTO @Table SELECT 'Italy'
INSERT INTO @Table SELECT 'Apple'
INSERT INTO @Table SELECT '234.62'
INSERT INTO @Table SELECT '2:234:43:22'
INSERT INTO @Table SELECT 'France'
INSERT INTO @Table SELECT '6435.23'
INSERT INTO @Table SELECT '2'
INSERT INTO @Table SELECT 'Lions'
SELECT *
FROM @Table
WHERE ISNUMERIC(Col) = 1
次を使用して、有効な文字のみを含めることができます。
[〜#〜] sql [〜#〜]
SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9.]%'
結果
Col
---------
234.62
6435.23
2
このようなものを試してください-それはあなたが言及したケースのために動作します。
select * from tbl
where answer like '%[0-9]%'
and answer not like '%[:]%'
and answer not like '%[A-Z]%'
SQL 2012以降では、_TRY_CAST
_/_TRY_CONVERT
_を使用して、数値型への変換を試すことができます。 TRY_CAST(answer AS float) IS NOT NULL
-ただし、これは科学表記法にも一致することに注意してください(1 + E34)。 (decimal
を使用する場合、科学表記法は一致しません)