December 19, 2005 at 8:33 pm
>Why can not select cast ( '123'+char(160) as int) work ?
Probably for the same reason that select cast ( '123'+char(12) as int) won't work. The extra special characters just aren't convertable to INT. SELECT CAST('123,456' AS INT) won't work either. Although the characters pass the ISNUMERIC test, they just won't convert to INT. They will cast to MONEY, however.
Microsoft would have us all believe that it's not a fault, it's a feature
Like I said previously... if you want to know if a string is numeric enough to be CAST as a number, ISNUMERIC is not the test it must pass.
--Jeff Moden
Change is inevitable... Change for the better is not.
December 19, 2005 at 8:47 pm
>Jeff, can you give an example where 'a-f' are considered by ISNUMERIC to be convertable to a number?
Sure Frank,
There's others but these will do... only one out of a-f that I can't get to roll to 1 is "f". My mistake on that... ISNUMERIC is really fickle
These all return 1...
SELECT ISNUMERIC(0X0a)
SELECT ISNUMERIC(0X0b)
SELECT ISNUMERIC(0X0c)
SELECT ISNUMERIC(0X0d)
SELECT ISNUMERIC('0d01')
SELECT ISNUMERIC(0X0e)
SELECT ISNUMERIC(1e10)
This returns 0...
SELECT ISNUMERIC(0X0f)
--Jeff Moden
Change is inevitable... Change for the better is not.
December 20, 2005 at 1:18 am
Aah, yes, I forgot about these hex thingies which are convertible to INT. One of these strange days, I get following results
SELECT ISNUMERIC(0X0e) AS E, ISNUMERIC(0X0f) AS F
E F
----------- -----------
0 0
(1 row(s) affected)
while
SELECT CAST(0X0e AS INT) AS E, CAST(0X0f AS INT) AS F
E F
----------- -----------
14 15
(1 row(s) affected)
works.
--
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org/blogs
My blog: http://www.insidesql.org/blogs/frankkalis/[/url]
July 2, 2014 at 6:39 pm
ISNUMERIC('Value'+'e01') -- always worked perfectly for me.
July 3, 2014 at 5:20 am
grantsaunders75 (7/2/2014)
ISNUMERIC('Value'+'e01') -- always worked perfectly for me.
Sneaky ๐
SELECT
NumberString,
[ISNUMERIC] = ISNUMERIC(NumberString),
[ISNUMERIC extra] = ISNUMERIC(NumberString+'e00'),
[Number] = CASE WHEN ISNUMERIC(NumberString+'e00') = 1 THEN CAST(NumberString AS FLOAT) ELSE NULL END
FROM (VALUES
('999999999999999999999999999999999999999999999999999999'),
('1d1'),
('1e1')
) d (NumberString)
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
July 14, 2014 at 8:49 am
Here's a slightly longer set of test data.
Note that spaces are particularly interesting, as are the spelled out FLOAT limits.
Please remove the TRY_CONVERT blocks for SQL Server versions below 2012.
SELECT
NumberString,
[ISNUMERIC] = ISNUMERIC(NumberString),
[ISNUMERIC extra Grant] = ISNUMERIC(NumberString+'e01'),
[ISNUMERIC extra Grant Chris] = ISNUMERIC(NumberString+'e00'),
[MONEY] = TRY_CONVERT(MONEY, NumberString),
[BIGINT] = TRY_CONVERT(BIGINT, NumberString),
[INT] = TRY_CONVERT(INT, NumberString),
[SMALLINT] = TRY_CONVERT(SMALLINT, NumberString),
[TINYINT] = TRY_CONVERT(TINYINT, NumberString),
[DECIMAL(38,36)] = TRY_CONVERT(DECIMAL(38,36), NumberString),
[DECIMAL(38,0)] = TRY_CONVERT(DECIMAL(38,0), NumberString),
[REAL] = TRY_CONVERT(REAL, NumberString),
[FLOAT] = TRY_CONVERT(FLOAT, NumberString),
[BIT] = TRY_CONVERT(BIT, NumberString)
FROM (VALUES
('999999999999999999999999999999999999999999999999999999'),
('-999999999999999999999999999999999999999999999999999999'),
('0'),
('-0'),
('1'),
('-1'),
('2'),
('-2'),
('00000'),
('-00000'),
('00000.0000'),
('-00000.0000'),
('9223372036854775807'),
('-9223372036854775807'),
('9223372036854775808'),
('-9223372036854775808'),
('9223372036854775809'),
('-9223372036854775809'),
('2147483647'),
('-2147483647'),
('2147483648'),
('-2147483648'),
('2147483649'),
('-2147483649'),
('32767'),
('-32767'),
('32768'),
('-32768'),
('32769'),
('-32769'),
('255'),
('-255'),
('256'),
('-256'),
('257'),
('-257'),
('12.3'),
('-12.3'),
('0.000000000000000000000000000000000001'),
('-0.000000000000000000000000000000000001'),
('.000000000000000000000000000000000001'),
('-.000000000000000000000000000000000001'),
(NULL),
(''),
(' '),
(' '),
('1d1'),
('-1d1'),
('1e1'),
('-1e1'),
('999999999999999999999999999999999999999999999999999999e1'),
('-999999999999999999999999999999999999999999999999999999e1'),
('34000000000000000000000000000000000000'),
('-34000000000000000000000000000000000000'),
('3.4e37'),
('-3.4e37'),
('340000000000000000000000000000000000000'),
('-340000000000000000000000000000000000000'),
('3.4e38'),
('-3.4e38'),
('3400000000000000000000000000000000000000'),
('-3400000000000000000000000000000000000000'),
('3.4e39'),
('-3.4e39'),
('17900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('-17900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('1.7899999e307'),
('-1.7899999e307'),
('179000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('-179000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('1.7899999e308'),
('-1.7899999e308'),
('1790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('-1790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
('1.7899999e309'),
('-1.7899999e309'),
('1.79e307'),
('-1.79e307'),
('1.79e308'),
('-1.79e308'),
('1.79e309'),
('-1.79e309'),
('1.790001e307'),
('-1.790001e307'),
('1.790001e308'),
('-1.790001e308'),
('1.790001e309'),
('-1.790001e309'),
('1.799001e307'),
('-1.799001e307'),
('1.799001e308'),
('-1.799001e308'),
('1.799001e309'),
('-1.799001e309'),
('$'),
('$1.0'),
('-$1.0'),
('$-1.0'),
('1.1e1'),
('-1.1e1'),
('.'),
(','),
('2012-01-01'),
('01-01-2012'),
('1-1-12'),
('1-12'),
('2012.01.01'),
('01.01.2012'),
('1.1.12'),
('1.12'),
('e'),
('d'),
('-'),
('1d1d1'),
('-1d1d1'),
('1e1e1'),
('-1e1e1'),
('1e1d1'),
('-1e1d1'),
('1d1e1'),
('-1d1e1')
) d (NumberString)
Viewing 6 posts - 16 through 20 (of 20 total)
You must be logged in to reply to this topic. Login to reply