2015-03-30 2 views
1

Я работаю с Oracle SQL, и у меня есть таблица с атрибутом POST (VARCHAR2 (10 BYTE)). Данные, которые мне даны, будут в формате 123.34, и мне понадобится один VARCHAR2 (123) и один NUMBER (0.34), чтобы сохранить это в другой таблице. Я пытался придумать способ сделать это в select-заявлении, но не мог понять это.Oracle SQL, разделяя строку Number, чтобы получить целые числа и десятичные числа отдельно

+0

Так что вам нужно разбить строку с помощью '.' (точка) как разделитель? –

+0

Да, это будет трюк. Я все еще не знаю, как бы это сделать в Sql, хотя – user2217874

ответ

0

Вы можете быть уверены, что изделие будет равно NUMBER? Если это так, то просто использовать TO_NUMBER():

WITH t1 AS (
    SELECT '123.34' AS post FROM dual 
) 
SELECT post_num, TRUNC(post_num), post_num - TRUNC(post_num) FROM (
    SELECT TO_NUMBER(post) AS post_num FROM t1 
); 

Если вы не уверены в том, что она всегда будет NUMBER, есть «безопасные» способы преобразования символа в значение, например, с помощью REGEXP_SUBSTR():

TO_NUMBER(REGEXP_SUBSTR(post, '^\d*(\.\d+)?')) 
+0

'mod (post_num, 1)' будет другим способом получения десятичной части. – Allan

+0

Никогда бы не придумал это самостоятельно, спасибо –

0

выберите '123.45' Num, зиЬзЬг ('123.45', 1, Instr ('123.45',) '' - 1) wholenum, зиЬзЬг ('123.45', Instr ('123.45', '.') + 1) десятичная партия от двойного

Выход: NUM WHOLENUM DECIMALPART 123,45 123 45

Смежные вопросы