sql语句如何判断字段是否为数字?

记得上次帮同事查数据时,他问如何过滤掉名字中带有数字的订单。
我写了一个随机的SQL,花了很长时间使用like '%number%',却发现他其实想用isnumeric。
那个订单相当老了,字段名都叫ziduan之类的,真是让人头疼。
但转念一想,isnumeric 确实相当方便,尤其是对于与数字混合的文本。
比如检查一列纯数字,isnumeric(ziduan) = 1 ,简单明了。
但如果你想查找带有字母的东西,使用“%number%”似乎更直观。
等等,还有一件事,我好像见过 isdigit 函数。
那个更准确吗? 不过目前使用的系统支持的不多,所以要看具体情况。

sql 判断字符串是否非数字

大家好,我们来谈谈使用SQL判断字符串是否为数字的问题。
让我向你解释一下。
这取决于您使用的数据库:
上周一位客户问我如何在 PostgreSQL 中执行此操作。
那家伙用正则表达式比较流利,比如写WHERE your_column ~ '^[0-9 ]+$',也能过滤掉数字字符串。
它与模式“^[0-9 ]+$”不匹配,它不是数字。
虽然简单粗暴,但是想要把这个东西做得好看确实需要练习。

但是如果我谈论 SQL Server,那会很有趣。
我之前在上海的项目中,有人使用了TRY_CAST(your_column AS INT)。
此函数尝试转换为整数。
如果转换成功,它将是一个数字。
如果转换失败,将返回NULL。
但请记住,SQL Server 的 TRY_CAST 可能会奇怪地处理空字符串 '',直接将其视为 NULL,而不将其计为数字。
因此,您必须添加 AND your_column IS NOT NULL 才能可靠。

还有ISNUMERIC函数,它在SQL Server中相当有名。
不过别迷信,我以前也经历过。
例如,它可能识别“1 .2 3 e5 ”,但可能无法识别“1 .2 3 e”。
因此,在使用ISNUMERIC时,最好堆一个正则表达式或者直接使用TRY_CAST,以免发生意外。

说实话,我很少使用PatIndex函数。
它主要是关于查找子字符串的位置,与确定它是否是数字无关,除非您将数字字符串采用特定格式(例如使用分隔符或其他东西),然后使用它来帮助检查。
它有点复杂并且通常不被使用。

总而言之,这取决于所使用的数据库:
PostgreSQL:正则表达式最直接,your_column ~ '^[0-9 ]+$'。

SQL Server:TRY_CAST相对现代,ISNUMERIC应谨慎使用,最好与其结合使用。

MySQL/Oracle:他们有自己的 REGEXP 或 RLIKE 版本,类似于 PostgreSQL。

但最重要的是想清楚:“非数字”到底是什么意思?只要有字母就不算数吗?或者像“1 e2 ”这样的科学记数法不算数?不同的场景可以有不同的写法。
我的一个同事就是因为这个原因花了很多时间写判断逻辑,最终发现没有考虑到科学计数法。

反正由你决定,选择一个与数据库相对应的可靠方法,不要只看理论,要在实践中尝试。