Это работает только для чисел, меньших 1.
select to_char(12.34, '0D99') from dual;
-- Result: #####
Это не сработает.
Вы можете сделать что-то подобное, но это приводит к ведущим пробелам:
select to_char(12.34, '999990D99') from dual;
-- Result: ' 12,34'
В конечном итоге вы можете добавить TRIM, чтобы избавиться от пробелов, но я не стал бы считать, что это правильное решение ...
select trim(to_char(12.34, '999990D99')) from dual;
-- Result: 12,34
Опять же, это будет только для чисел с максимальным числом в 6 цифр.
Редактирование: я хотел добавить это как комментарий к предложению DCookie, но я не могу.
Синтаксис строго зависит от того, какую СУБД SQL вы используете. Вот несколько способов сделать это в ANSI / ISO (он же должен работать с любой СУБД SQL), MySQL, SQL Server и Oracle. Имейте в виду, что предлагаемый мной метод ANSI / ISO обычно будет намного медленнее, чем два других метода, но если вы используете СУБД SQL, отличную от MySQL, SQL Server или Oracle, тогда это может быть единственный способ (например, если ваша СУБД SQL не поддерживает MERGE
):
ANSI / ISO:
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where exists (
select *
from sale
where sale.udid = ud.id
);
MySQL:
update ud u
inner join sale s on
u.id = s.udid
set u.assid = s.assid
SQL Server:
update u
set u.assid = s.assid
from ud u
inner join sale s on
u.id = s.udid
PostgreSQL:
update ud
set ud.assid = s.assid
from sale s
where ud.id = s.udid;
Обратите внимание, что целевая таблица не должна повторяется в предложении FROM
для Postgres.
Oracle:
update
(select
u.assid as new_assid,
s.assid as old_assid
from ud u
inner join sale s on
u.id = s.udid) up
set up.new_assid = up.old_assid
SQLite:
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where RowID in (
select RowID
from ud
where sale.udid = ud.id
);
Стандартный подход SQL был бы
UPDATE ud
SET assid = (SELECT assid FROM sale s WHERE ud.id=s.id)
На SQL Server вы можете использовать соединение
UPDATE ud
SET assid = s.assid
FROM ud u
JOIN sale s ON u.id=s.id
Это должно работать в SQL Server:
update ud
set assid = sale.assid
from sale
where sale.udid = id
Еще один пример того, почему SQL не совсем переносим.
Для MySQL это будет:
update ud, sale
set ud.assid = sale.assid
where sale.udid = ud.id;
Для получения дополнительной информации прочтите обновление нескольких таблиц: http://dev.mysql.com/doc/refman/5.0/en/update.html
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]