【问题标题】:Snowflake SQL - Select the rows of a column where the values contain at least one alphabetSnowflake SQL - 选择值包含至少一个字母的列的行
【发布时间】:2021-10-05 04:10:26
【问题描述】:

我尝试使用此代码,但没有选择任何行。

select column
from table
where column like '%[a-z]%';

在输出中,我期望值包含至少一个字母的所有行。该列包含 52813897、52813883、262556854、r9av145、2z5pgnw、262729215、eunjh65 等值。

【问题讨论】:

  • SQL LIKE 命令不支持这样的“范围”。

标签: sql snowflake-cloud-data-platform


【解决方案1】:

你需要一个正则表达式:

where col rlike '[a-z]'

注意:根据排序规则,这可能只查找小写字母,因此您可能需要:

where col rlike '[a-zA-Z]'

或者对于任何非数字:

where col rlike '[^0-9]'

或者如果你想更笼统:

where col rlike '[[:alpha:]]'

或者对于任何非数字:

where col rlike '[^0-9]'

【讨论】:

  • 我试过这个,但它同样没有给我任何输出。没有行被选中。
  • @apramod 。 . .如果是这样的话,那么看起来像字母的字符真的不是标准的字母字符。但不要绝望,你可以像最后建议的那样寻找非数字。
【解决方案2】:

使用RLIKE

select column
from table
where RLIKE(column, '.*[a-z].*');

RLIKE(column, '.*[a-z].*', 'i') 可用于不区分大小写的匹配。

【讨论】:

  • 谢谢!这似乎只是返回我期望的响应的查询。您介意解释一下为什么必须在表达式中使用句点吗?
  • @apramod .* 表示任意数量的字符,它对 LIKE 的作用类似于 %
【解决方案3】:

你可以试试演员:

select col from Table where CAST(col as varchar) Like '%[a-z]%'

select col from Table where CAST(col as nvarchar) Like '%[a-z]%'

【讨论】:

    【解决方案4】:

    你需要这样的东西:

      DECLARE @Table TABLE(
                Col VARCHAR(50)
        )
        
        INSERT INTO @Table SELECT 'ABC' 
        INSERT INTO @Table SELECT 'Italy' 
        INSERT INTO @Table SELECT 'Apple1' 
        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 Col  LIKE '%[a-z]%'  -- you can use it 
       
    

    结果将显示所有带有 caintan a-z 的行

    看起来像:

    【讨论】:

    • 我相信这与我尝试的查询相同。由于某种原因,它没有返回任何行。
    猜你喜欢
    • 2020-04-05
    • 2022-01-27
    • 2016-12-30
    • 1970-01-01
    • 2018-02-13
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多