SQL中如何判断一个字符串是否为数字?
在 Oracle 10g 上的 SQL 查询中,我需要确定字符串是否为数字。我该怎么做?
In a SQL query on Oracle 10g, I need to determine whether a string is numeric or not. How can I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用 REGEXP_LIKE:
You can use REGEXP_LIKE:
您可以尝试以下操作:
其中 string1 是您正在评估的内容。如果是数字,它将返回 null。请参阅此处以获取进一步说明
You ca try this:
where string1 is what you're evaluating. It will return null if numeric. Look here for further clarification
我无法访问 10G 实例进行测试,但这在 9i 中有效:
我假设您希望将空值/空值视为 FALSE。
I don't have access to a 10G instance for testing, but this works in 9i:
I have assumed you want nulls/empties treated as FALSE.
正如 Tom Kyte 在 http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:7466996200346537833,如果您使用的是内置
TO_NUMBER
在用户定义的函数中,您可能需要一些额外的技巧才能使其工作。问题是优化编译器可能认识到
TO_NUMBER
的结果没有在任何地方使用并优化它。汤姆说(他的例子是关于日期而不是数字):
As pointed out by Tom Kyte in http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:7466996200346537833, if you're using the built-in
TO_NUMBER
in a user defined function, you may need a bit of extra trickery to make it work.The problem is that the optimizing compiler may recognize that the result of the
TO_NUMBER
is not used anywhere and optimize it away.Says Tom (his example was about dates rather then numbers):
这是一种确定数字的方法,可以作为简单查询的一部分,而无需创建函数。考虑嵌入空格、+- 不是第一个字符或第二个小数点。
Here is a method to determine numeric that can be part of a simple query, without creating a function. Accounts for embedded spaces, +- not the first character, or a second decimal point.
我发现该解决方案
允许嵌入空白...它接受“123 45 6789”,就我的目的而言,这不是一个数字。
另一个级别的修剪/翻译可以纠正这个问题。以下将检测包含带有前导或尾随空格的连续数字的字符串字段,以便 to_number(trim(string1)) 不会失败
I found that the solution
allows embedded blanks ... it accepts "123 45 6789" which for my purpose is not a number.
Another level of trim/translate corrects this. The following will detect a string field containing consecutive digits with leading or trailing blanks such that to_number(trim(string1)) will not fail
对于整数,您可以使用以下内容。第一个翻译将空格更改为字符,第二个翻译将数字更改为空格。如果仅存在数字,则 Trim 将返回 null。
For integers you can use the below. The first translate changes spaces to be a character and the second changes numbers to be spaces. The Trim will then return null if only numbers exist.