排除具有数字字符的行,仅在行的开头

Posted

技术标签:

【中文标题】排除具有数字字符的行,仅在行的开头【英文标题】:Exclude the row which has numeric characters, only at the beginning of the row 【发布时间】:2021-05-14 07:30:56 【问题描述】:

我有一个类似的表格如下:

product      
01 apple
02 orange
banana 10

我试图仅排除以数字开头的行。如果数字不在开头,则不应将其排除。所需的表格输出应该是这样的:

product      
banana 10

但是,对于我当前的查询,只要行中有数字,它就会排除所有内容:

SELECT * 
FROM table 
WHERE product NOT LIKE '%0%'

谁能建议我如何解决这个问题?非常感谢。

【问题讨论】:

【参考方案1】:

可能是这样的:

SELECT * 
FROM table 
WHERE left(product, 1) NOT IN ('0','1','2','3','4','5','6','7','8','9')

【讨论】:

不错 - 避免使用正则表达式。 其实,采用这种方法,我们或许可以做得更好一些。我记得有一个函数可以获取字符的 ASCII 值。从字符串中取出第一个字符,获取 ASCII 值,然后将其与 '0' 到 '9' 的 ASCII 范围进行比较。这将节省您需要小哈希联接来执行 NOT IN。【参考方案2】:

正则表达式匹配不以数字开头的行是

^[^0-9].*

mysql 中的 sql 查询如下所示

SELECT * 
FROM table 
WHERE product RLIKE '^[^0-9].*'

【讨论】:

感谢您提供建议的解决方案,但是我的 dmbs 无法识别 RLIKE。【参考方案3】:

我会推荐正则表达式。在 Redshift 中,这看起来像:

where product ~ '^[^0-9]'

我也可以建议:

where left(product, 1) not between '0' and '9'

【讨论】:

以上是关于排除具有数字字符的行,仅在行的开头的主要内容,如果未能解决你的问题,请参考以下文章

如何仅获取以“1”开头的文件中的第一行。后跟除数字以外的任何字符?

正则表达式:数字开头中间字母结尾数字

Linux命令之匹配行开头字符串look

Oracle BI (OBIEE) - 仅用于数字值的通配符搜索

具有限制的 XSD 数据类型字符串:max。仅 2 位数字

删除CSV文件中不以python中的数字开头的所有行