Search Postgresql Archives

Re: help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Yes. I know that using '' defines the field as a
string so I get the TEXT cast. Let me try to show you
why I need it in ''. I default my parameters in my
application to empty strings. They don't need to be
casted so I can override them at any time with an
integer value, string, boolean, float, etc. So I
typically will defalut value = ''

value = ''
nullif($value,'') // evaluates nullif(,''). ERROR.

// override value now with integer
value = 4
nullif('$value','') // evaluates nullif('4',''). Now
we add 4 to int column

// override again
value = ''
nullif('$value','') // evals to nullif('',''). Now we
know it's NULL so let's insert NULL

In MS SQL (no m$ - you like how they patented XML &
tried patenting IPv6? Oh and tabbed browsing. Patents
are a joke and hinder innovation) evaluats
nullif('4','') as an INT 4 or nullif('','') returns
any NULL -- no matter the column inserted into.

Sorry if I'm being difficult or pestering. I just want
to use postgres for my applications database and know
I can get this working. 

All I need is integer columns evaluting in a 

nullif('1','') returns int = 1
nullif('','') returns int = null 
nullif('0','') returns int = 0

fashion upon inserting to an INTEGER column. Forget
booleans. Forget text. Just integers. Is this
possible? Nothing is impossible. Tell me it can be
done!

Could I use a C++ function to do what I'm trying to
accomplish? Or is there an more elegant solution?
(like a built in sql one)

Thanks 


--- Martijn van Oosterhout <kleptog@xxxxxxxxx> wrote:

> On Thu, Aug 25, 2005 at 04:10:27PM -0700, Matt A.
> wrote:
> > Anyway, I am new to postgres and looking to casts.
> I
> > have wrote this question several times before and
> on
> > this version I forgot to add the exact rules of
> why
> > it's breaking and what i need it to do. I will try
> to
> > be more clear... 
> > 
> > I use the rules to insert 0/1/null inserts into
> > booleans, integers, text, etc. fields.
> > 
> > Example: insert into table (bool_column) values
> > nullif('',''));
> > ERROR: column "bool_column" is of type boolean but
> 
> > expression is of type text.
> 
> First rule, the type of a functions is determined by
> its arguments.
> Neither of the arguments in your example are boolean
> so it doesn't know
> you want a boolean. nullif itself works on any type.
> 
> kleptog=# create temp table x (t text, b bool, i
> integer);
> CREATE TABLE
> kleptog=# insert into x values (nullif('1','1'),
> nullif(true,true),
> nullif(4,4) );
> INSERT 114774 1
> kleptog=# select * from x;
>  t | b | i 
> ---+---+---
>    |   |  
> (1 row)
> 
> All nulls...
> 
> Your choice are to indicate in the arguments what
> type you want. In
> this case the arguments arn't booleans so that won't
> work. Your other
> option is to cast the result, which you can't
> because text -> bool is
> not a valid typecast.
> 
> > 
> > Where '' == '' should evaluate to NULL as OPAQUE
> > (depreciated) or similiar return instead of TEXT
> cast.
> > 
> > So if I could alter the cast from text to return
> > either INTEGER or TEXT, that would super! I'm not
> sure
> > if it's possible but if so I'm willing to do what
> it
> > takes to accomplish it. 
> 
> Functions don't return OPAQUE, they can't because a
> function knows
> exactly what it's returning. In your case it's
> returning TEXT because
> that's what the arguments default to if it doesn't
> know any better.
> 
> Technically, nullif takes arguments
> (anyelement,anyelement) which means
> it can take any type, as long as they're the same.
> 
> Hope this clarifies it for you.
> -- 
> Martijn van Oosterhout   <kleptog@xxxxxxxxx>  
> http://svana.org/kleptog/
> > Patent. n. Genius is 5% inspiration and 95%
> perspiration. A patent is a
> > tool for doing 5% of the work and then sitting
> around waiting for someone
> > else to do the other 95% so you can sue them.
> 



		
____________________________________________________
Start your day with Yahoo! - make it your home page 
http://www.yahoo.com/r/hs 
 

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux