排除具有数字字符的行,仅在行的开头
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”开头的文件中的第一行。后跟除数字以外的任何字符?