【问题标题】:SQL Query to find all columns except purely numeric or blank valuesSQL 查询以查找除纯数字或空白值之外的所有列
【发布时间】:2021-02-18 17:58:37
【问题描述】:

我在 sql 表中有一个列,您可以在其中存储任何内容(字符、数字、特殊字符、空格或所有内容的组合)。我想找到或有一个 select 语句,它返回所有值,除了那些只包含纯数值或空格的值。

如果我有价值观的话

  1. ABCD
  2. abcd
  3. 1234
  4. AB12
  5. “?” (空格)
  6. 12AB
  7. ab@!
  8. @!12
  9. !@#$

它应该给出除第 3 行和第 5 行之外的所有行

【问题讨论】:

    标签: sql sql-server sql-server-2016


    【解决方案1】:
    WHERE ISNUMERIC(isnull(field,1)) != 1
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    【解决方案2】:
    where ISNUMERIC(col) != 1 and len(rtrim(col)) >= 1
    

    完整示例:

    create table #t1 (col varchar(50))
    
    insert into #t1 (col) values('ABCD')
    insert into #t1 (col) values('abcd')
    insert into #t1 (col) values('1234')
    insert into #t1 (col) values('AB12')
    insert into #t1 (col) values(' ')
    insert into #t1 (col) values('12AB')
    insert into #t1 (col) values('ab@!')
    insert into #t1 (col) values('@!12')
    insert into #t1 (col) values('!@#$')
    
    select col    
    from #t1    
    where isnumeric(col) != 1 and len(rtrim(col)) >= 1
    
    drop table #t1
    

    【讨论】:

      【解决方案3】:

      ISNUMERIC 并不总是返回正确的结果。 最好使用TRY_CAST/CONVERT 来指定您希望转换的内容:

      WHERE TRY_CAST(field AS real) IS NULL -- or you can put int, bigint, numeric(18,2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 2022-11-26
        • 2020-05-06
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        相关资源
        最近更新 更多