[Info-ingres] why is an empty string an integer

Adrian Williamson adrian.williamson at rationalcommerce.com
Wed Jul 29 07:39:37 UTC 2020


Hi,

 

My guess is blank string is being translated to zero:

 

* select integer('');\g

Executing . . .

 

 

+-------------+

|col1         |

+-------------+

|            0|

+-------------+

 

Ingres 10.1 did not want to play with these new predicates, and my Ingres 11 did as yours.

 

OpenROAD gave up here:

 

 

insert into fred values (null), (''), ('1'), ('13-jan-2020');

                              ^

%% Error at line 11

E_W400F0 Syntax error.  The last symbol read was ','.

 

Go figure.

 

That’s why I don’t look at new SQL features – no point.

 

Cheers

 

Adrian

 

From: Martin Bowes <martin.bowes at ndph.ox.ac.uk> 
Sent: 29 July 2020 08:25
To: aw at rationalcommerce.com; Ingres lists <info-ingres at lists.planetingres.org>
Subject: RE: [Info-ingres] why is an empty string an integer

 

Hi Adrian,

 

Yes zero works fine.

 

The syntax is referred to as ‘predicates’ and there are a whole host of them to do basic tests. I have found them extremely useful in doing data imports from less than reliable third parties.

 

Marty

 

From: aw at rationalcommerce.com <mailto:aw at rationalcommerce.com>  <aw at rationalcommerce.com <mailto:aw at rationalcommerce.com> > 
Sent: 29 July 2020 08:18
To: Martin Bowes <martin.bowes at ndph.ox.ac.uk <mailto:martin.bowes at ndph.ox.ac.uk> >; Ingres lists <info-ingres at lists.planetingres.org <mailto:info-ingres at lists.planetingres.org> >
Subject: Re: [Info-ingres] why is an empty string an integer

 

Morning

 

If you use zero instead of 1 do you get the same?

 

I must admit i have not seen that 'when a is integer/float' syntax before.

 

But then i use openroad so our syntax is about 20 years behind.

 

Adrian

 

------ Original message------

From: Martin Bowes

Date: Wed, 29 Jul 2020 08:01

To: Ingres lists;

Cc: 

Subject:[Info-ingres] why is an empty string an integer

 

Hi All,

 

I may have come across this before, but it’s early and I haven’t had my coffee.

 

declare global temporary table fred(

    a varchar(20)

) on commit preserve rows with norecovery;

Executing . . .

 

continue

* * insert into fred values (null), (''), ('1'), ('13-jan-2020');

Executing . . .

 

(4 rows)

continue

* * * * * * * * select case when a is null then 'null'

            when a = '' then 'empty string'

            else a end as data,

       case when a is integer then 'integer' else 'not integer' end as is_integer,

      case when a is float then 'float' else 'not float' end as is_float,

       case when a is ansidate then 'ansidate' else 'not ansidate' end as is_ansidate

from fred;

Executing . . .

 

 

┌────────────────────┬───────────┬─────────┬────────────┐

│data                │is_integer │is_float │is_ansidate │

├────────────────────┼───────────┼─────────┼────────────┤

│null                │not integer│not float│not ansidate│

│empty string        │integer    │float    │not ansidate│

│1                   │integer    │float    │not ansidate│

│13-jan-2020         │not integer│not float│ansidate    │

└────────────────────┴───────────┴─────────┴────────────┘

(4 rows)

continue

 

Now the tests with nulls behave as I expect. But the empty string cases I did not expect. Is this a bug? Documented behaviour?

 

Martin Bowes

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.planetingres.org/pipermail/info-ingres/attachments/20200729/6e48fc9a/attachment.html>


More information about the Info-ingres mailing list