web-dev-qa-db-ja.com

数字のみを取得するSQLのような演算子

これは単純な問題ですが、まだ解決策が得られていないと思います。ここで説明するように、列からのみ有効な数値を取得したいと思います。

次の値を持つ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

これを行う方法はありますか?

24
Thunder

これを試すことができます

ISNUMERIC(Transact-SQL)

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
22
Adriaan Stander

次を使用して、有効な文字のみを含めることができます。

[〜#〜] sql [〜#〜]

SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9.]%'

結果

Col
---------
234.62
6435.23
2
41
beach

このようなものを試してください-それはあなたが言及したケースのために動作します。

select * from tbl
where answer like '%[0-9]%'
and answer not like '%[:]%'
and answer not like '%[A-Z]%'
10
David Hall

SQL 2012以降では、_TRY_CAST_/_TRY_CONVERT_を使用して、数値型への変換を試すことができます。 TRY_CAST(answer AS float) IS NOT NULL-ただし、これは科学表記法にも一致することに注意してください(1 + E34)。 (decimalを使用する場合、科学表記法は一致しません)

1
Mark Sowul