Vince LaMonica <[EMAIL PROTECTED]> wrote on 12/12/2005 01:49:54 PM:
> Hi all,
>
> I'm curious if this is possible in 4.10: I have a table:
>
>
+--+-+--+-+---+--+
> | Field| Type| Null | Key | Default | Extra |
>
+--+-+--+-+---+--+
> | tracking_id | int(12) | | PRI | NULL |
auto_increment
> | ups_tracking | varchar(64) | | | | |
> | order_number | varchar(64) | | | | |
> | time_added | timestamp | YES | | CURRENT_TIMESTAMP | |
> | aba_order_number | varchar(96) | | | | |
>
+--+-+--+-+---+--+
>
> A sample value for the order_number field looks like this:
>
> ABA-123456
>
> I would like to make the aba_order_number field reflect just what comes
> after the "ABA-" part. So, is there a way I can assign a default value
to
> aba_order_number to this:
>
> IF(LEFT(order_number,4) = 'ABA-',REPLACE(order_number, 'ABA-',''),'')
>
> Currently this table is populated via ODBC. Only the ups_tracking and
> order_number fields are populated through UPS' WorldShip software [it
> simply performs an export of those two fields each time a new tracking
> number is generated].
>
> I can run this:
>
> update example_table set aba_order_number=IF(LEFT(order_number,4) =
> 'ABA-',REPLACE(order_number, 'ABA-', ''),'') ;
>
> and I get the result I am looking for.
>
> But running this:
>
> alter table example_table alter column aba_order_number set
> default IF(LEFT(order_number,4) = 'ABA-',REPLACE(order_number, 'ABA-',
> ''),'');
>
> doesn't seem to make a difference, as it assigns the string "IF(LEFT..."
> as the default text, instead of seeing it as a function. The reason I am
> using an IF() is because some order_number values will not contain a
> leading "ABA-" string.
>
> I'm using 4.1.13, FWIW.
>
> Thanks for any tips y'all might have.
>
> /vjl/
>
First - THANK YOU for remembering to post your version!
Quoting from http://dev.mysql.com/doc/refman/4.1/en/create-table.html
>>>
The DEFAULT clause specifies a default value for a column. With one
exception, the default value must be a constant; it cannot be a function
or an expression. This means, for example, that you cannot set the default
for a date column to be the value of a function such as NOW() or
CURRENT_DATE. The exception is that you can specify CURRENT_TIMESTAMP as
the default for a TIMESTAMP column as of MySQL 4.1.2. See Section
11.3.1.2, “TIMESTAMP Properties as of MySQL 4.1”.
No functions are allowed in a DEFAULT declarations, only constants. The
single, almost-but-not-quite exception to this rule is for timestamp
fields but that still won't help you do what you wanted to do. I do not
believe that full functions are available even in 5.0 yet so an upgrade
won't help either.
Sorry!
Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine