2015-09-29 2 views
0

Это не об усечении десятичных знаков. Скорее, обрезание целых чисел с помощью Oracle 12c.Усечение чисел с помощью Oracle 12c

select CAST('123456789' AS NUMBER(4)) from DUAL; 

Было бы здорово, если бы это вернуло '1234' вместо того, чтобы выбрасывать исключение.

+3

Почему бы это быть «простой запрос»? Это не результат, который, очевидно, разумный. Число 12346789 в 10 000 раз больше, чем 1234. Почему имеет смысл возвращать это, а не бросать ошибку? Разумеется, вы можете использовать 'substr', чтобы выбрать первые 4 цифры вашей строки, а затем передать это число. Вам нужно будет реализовать эту логику, потому что это очень специфическое поведение для бизнес-требований. –

+0

Я согласен с заявлением Джастина. Для того, что вы пытаетесь сделать, вам нужно рассматривать его как строку ... 'Выберите CAST ('123456789' AS VARCHAR (4)) из DUAL;' – knuckles

+0

SQL Server делает это с CONVERT(). Это один звонок. Очевидно, Oracle не конкурирует таким образом! Спасибо! : D – Ray

ответ

0

Как было предложено Джастином, это неразумно делать это. Но это можно сделать так.

select cast(substr('123456789',1,4) as integer) from dual; 

Но это не сработает в следующих сценариях.

  1. У вас есть 0 перед номером.
  2. Вы десятичную цифру перед 4 цифры (ex 123.4)