updating field with decimal values in database - mysql

I have a database with 2 fields named "number" and "form" and need to alter some fields.
I have a list in excel with the values i.e 1234.5, 1233.7 where the 1234 is the number and the 5 is the form number in my table.
is it possible to do something like:
UPDATE `table` SET `field`='value' WHERE `number` IN (1234,1233) AND `form` IN (5,7)
the first problem I see is when I have two "numbers" that is the same but different "form" numbers.
or can I do something like:
UPDATE `table` SET `field`='value' WHERE CONCAT(number,'.',form) IN (1234.5,1233.7)
so is there any other way I can approach this?

UPDATE `table` SET `field`='value' WHERE CONCAT(number,'.',form) IN ('1234.5','1233.7')
does the job, just needed the IN ('1234.5','1233.7') instead of IN (1234.5,1233.7)

I am not exactly sure what you are trying to accomplish, but it sounds like the numbers would be different. Try finding the POSITION() of the "." in the number. Then, do a SUBSTRING() on those positions. It Would look like so:
UPDATE `table`
SET `field`='value'
WHERE number = SUBSTRING(input, 1, POSITION('.', input) - 1)
AND form = SUBSTRING(input, POSITION('.', input) + 1)
The following code will check the Number before the ".", and then the form after the ".".

Related

Append a "+" at the beginning of every field without a "+"

I need to write a query that appends a "+" on the front of every p2_number meta_key that doesn't already begin with a "+". The name of the table is "wp_4_postmeta". I attached an image of the database so you can see what I'm talking about. http://mmw-file-sharing.s3.amazonaws.com/2015/Screen%20Shot%202015-07-30%20at%204.12.25%20PM.png
UPDATE aTable
SET someField = CONCAT('+', someField)
WHERE someField NOT LIKE '+%'
;
If someField is also indexed, the query should be fairly quick as well.
Update table set column = concat("+", column) where column not like "+%"
Should do it
You can check using substr if the first character is a +. If so, return just the field value, else prepend a +.
select
case when substr(p2_number, 1, 1) = '+' then
p2_number
else
concat('+' p2_number)
end as p2_numberplus
from
wp_4_postmeta
Or do you mean actually updating the table data? In that case, Uueerdo's answer is the one you want.

How can I move a dot 6 spaces to the left on all values of a column in MySQL?

The title resumes it all.
I have a column named "weight" and some values like "2000000.0000", for example.
I need the output to be something like "2.0000000000", and if the number is something like "200000.0000" the output needs to be like "0.2000000000".
That's even possible? I don't know, maybe regex?
Just divide it
SELECT weight/1000000 as Weight
FROM yourtable
Update TableName set col = col/1000000 [where condition]

Mysql query that replaces a unknown number in a path

Lets say that you have the following stored in table:
{2:22}{4:5}{34:4}
I what to delete {4:5} from this string but the system dosent know what the number after the ":" is just the first one. The query looks something like this:
UPDATE tbl SET this = REPLACE(this,'{4:??}','') WHERE id = 1;
What do i need to put in ?? place to return the following result?
{2:22}{34:4}
Here's one way to do it using LEFT, SUBSTRING, LOCATE and REPLACE:
update yourtable
set yourcolumn =
replace(yourcolumn,
Left(
Substring(yourcolumn,
Locate('{4:',yourcolumn),
Length(yourcolumn)),
Locate('}',Substring(yourcolumn,
Locate('{4:',yourcolumn),
Length(yourcolumn)))),
'')
SQL Fiddle Demo

MySQL - is it possible to update only part of value from current column?

Here is an example table on which I would like to execute a query:
Structure of table_1
number | photos (CHAR,4)
1234 | 1210
I would like to update value from column photos, but without changing the whole value. I would like change, for example, only third character to "2" without knowing the whole value. How can I do that?
I know I could do that in this way described below, but the problem is the value may be variable and it is a column type CHAR, not INT.
UPDATE table_1 SET photos = (photos + 10) where number='1234'
Yes with mid, left and right functions because photos is a type char:
UPDATE table_1 SET photos =
concat(
left( photos, 2),
'1',
right( photos, 1)
)
where number='1234'
Use concat(), left() and substring()
The example above would look like this:
update table_1
set photos = concat(left(photos, 2), "2", substring(photos, 4))
where number = '1234'
The advantage to this over left/right, is this will work for variable lengths of "photos".
Looking at it more generally, if you want to set the xth position to "2":
update table_1
set photos = concat(left(photos, x-1), "2", substring(photos, x+1))
where number = '1234'
(NOTE: I don't have MySQL running right now so I can't test the above. There are certain to be off-by-one errors which should be easy for your to correct)
If the column contains only numbers then the example you gave would work. The value will be converted to an integer, added to, and then converted back.
You might want to explain your reasoning for wanting to do this though. It seems a bit strange.

MySQL query to prepend character to each entry

I have a table of users which has a username column consisting of a six digit number e.g 675381, I need to prepend a zero to each of these usernames e.g. 0675381 would be the final output of the previous example, is there a query that could handle this?
UPDATE Tablename SET Username = Concat('0', Username);
what type is the column of?
if it's string type, try something like this:
UPDATE your_table SET column_name=concat('0',column_name);
You mean "prepend" ? i.e. add it on the front?
Is the column numeric? Do you always want 7 characters output?
Assuming that, something like this would work for a query:
select LPAD(CONVERT(username, CHAR), 7, '0')
If the column is characters, the CONVERT() part is unnecessary, just LPAD the username.
If you want to permanently modify the value in the table, you'll need to ensure the column is a character type and UPDATE using the above.
You might want to use CONCAT_WS('', '0', Username) because if there is a null value, then you'll end up with NULL instead of '0'. This probably isn't a problem, but something I've learnt the hard way.