sql like运算符只能获取数字

Thu*_*der 24 sql sql-server numbers

这是我认为一个简单的问题,但还没有得到解决方案.我想从这里解释的列中获取有效数字.

假设我们有一个varchar列,其中包含以下值

ABC
Italy
Apple
234.62
2:234:43:22
France
6435.23
2
Lions
Run Code Online (Sandbox Code Playgroud)

这里的问题是只选择数字

select * from tbl where answer like '%[0-9]%' 会做到但它会回来

    234.62
    2:234:43:22
    6435.23
    2
Run Code Online (Sandbox Code Playgroud)

在这里,显然,2:234:43:22是不可取的,因为它不是有效数字.

期望的结果是

        234.62
        6435.23
        2
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

bea*_*ach 41

您可以使用以下内容仅包含有效字符:

SQL

SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9.]%'
Run Code Online (Sandbox Code Playgroud)

结果

Col
---------
234.62
6435.23
2
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个非常过时的帖子,但我刚刚遇到它.我仍然觉得有必要指出这会返回一个IP地址(或任何其他带有多个小数点的值). (4认同)
  • [需要一个COLLATE子句或使用一组而不是范围的](http://dba.stackexchange.com/questions/34730/why-are-non-digits-like-0-9/34731#34731) (3认同)

Adr*_*der 23

你可以试试这个

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
Run Code Online (Sandbox Code Playgroud)

  • 是.ISNUMERIC有问题.@gbn提到`+`,它接受否定,也尝试`ISNUMERIC(' - 1.0e + 5')`.你必须说ISNUMERIC('+'+ Col +'e0').这使得'NOT LIKE'%[^ 0-9.]%`解决方案至少同样好,如果不是更好的话. (2认同)

Dav*_*all 10

尝试这样的事情 - 它适用于你提到的案例.

select * from tbl
where answer like '%[0-9]%'
and answer not like '%[:]%'
and answer not like '%[A-Z]%'
Run Code Online (Sandbox Code Playgroud)