Как это можно считать числом?Как это может быть число?
<cfquery name="test">
SELECT ISNUMERIC("8D4") AS isnum
</cfquery>
это возвращает 1.
Существуют ли другие проверки я должен выполнять?
Как это можно считать числом?Как это может быть число?
<cfquery name="test">
SELECT ISNUMERIC("8D4") AS isnum
</cfquery>
это возвращает 1.
Существуют ли другие проверки я должен выполнять?
D
и E
считаются особыми случаями для isNumeric()
. E
легко показать, чтобы отразить научные обозначения:
SELECT ISNUMERIC('8E4'), 8E4
Результаты в:
1 80000
случае с D
отличается. Многие ресурсы в Интернете описывают его как form of denoting decimal numbers, или just a form of scientific notation.
Складывается странное поведение, если изменение моего SQL выше, чтобы использовать D
вместо хотя:
SELECT 8E4, 8D4
В SQL Studio, это приводит:
(No column Name) D4
80000 8
Я не эксперт SQL (любого stripe: я просто разработчик CFML), но это говорит мне, что описание D
раньше для десятичных знаков или S/N - это не полная история.
Но что бы ни история, это хорошо документированы, что форма nDn
(где n
являются цифры) является TRUE
к ISNUMERIC()
.
Вы правы, это не шестнадцатеричный, как я думал. Это архаичная форма научной нотации, о которой я забыл. Это фактически то же самое, что и '8E4'. Нечетное поведение, которое вы видите, связано с ограничением синтаксического анализа (возможно, ошибкой) SQL при попытке отделить числовые литералы от псевдонимов столбцов без пробела, но на самом деле это не имеет никакого отношения к тому, почему '8D4' является число. Чтобы узнать, что это за номер, попробуйте 'SELECT CAST ('8D4' As Float)' вместо этого. – RBarryYoung
Ах! Я попытался использовать 'DECIMAL' и получил ошибку. Хотел бы я сначала попробовать «FLOAT»! –
Ваш параметр содержит D
, который является шестнадцатеричным. 8D4
(in hex) is 2260
(in decimal)
Таким образом, это действительный номер, поэтому 1 будет возвращен.
Если это так, то '8A4',' 8F4' также будет числовым, да? Но это не так. Вы * проверяли * этот ответ, прежде чем публиковать его? –
Одно слово: "HexaDecimal". – RBarryYoung
Это может быть слово, но это не имеет никакого отношения к ответу. –
@AdamCameron Да, это архаичный формат научной нотации. – RBarryYoung