Программирование >>  Преобразование значений null 

1 ... 175 176 177 [ 178 ] 179 180 181 ... 219



instr(msg,],1,2)-instr(msg,[,1,2)) second val, substr(msg, instr(msg,[,-1,1),

instr(msg,],-1,1)-instr(msg, [,-1,1)) last val

from V

FIRST VAL SECOND VAL LAST VAL

[867 [- [5309

[11271978 [4 [Joe

[F GET ROWS() [ROSEWOOD...SIR [44400002 [non marked [unit [withabanana?

Из приведенного выше результирующего множества видим, что со значениями возвращается и открывающая скобка. Вероятно, вы думаете: Хорошо, верну добавление 1 к INSTR и избавлюсь от начальной квадратной скобки. Зачем вычитать 1? Причина такова: если вернуть добавление без вычитания, в результаты попадут закрывающие квадратные скобки, как можно увидеть ниже:

select substr(msg,

instr(msg,[,1,1)+1,

instr(msg,],1,1)-instr(msg,[,1,1)) first val, substr(msg, instr(msg,[,1,2)+1,

instr(msg,],1,2)-instr(msg,[,1,2)) second val, substr(msg, instr(msg,[,-1,1)+1,

instr(msg,],-1,1)-instr(msg,[,-1,1)) last val

from V

FIRST VAL SECOND VAL LAST VAL

867] -] 5309]

11271978] 4] Joe]

F GET ROWS()] ROSEWOOD...SIR] 44400002] non marked] unit] withabanana?]

На данный момент должно быть понятно: чтобы гарантировать отсутствие квадратных скобок в возвращаемых результатах, необходимо добавить 1 к начальному индексу и отнять 1 из конечного индекса.

Как определить количество дней в году (альтернативное решение для Oracle)

Задача

Требуется определить количество дней в году.

Рассматриваемый рецепт представляет альтернативу решению задачи Как определить количество дней в году главы 9. Данное решение подойдет только для Oracle.



Решение

С помощью функции TO CHAR представьте последнюю дату года как трехзначный порядковый номер дня года:

1 select Days in 2005:

2 to char(add months(trunc(sysdate, y), 12)-1,DDD)

3 as report

4 from dual

5 union all

6 select Days in 2004:

7 to char(add months(trunc(

8 to date(01-SEP-2004),y),12)-1,DDD)

9 from dual

REPORT

Days in 2005: 365 Days in 2004: 366

Обсуждение

Начнем с использования функции TRUNC, чтобы возвратить первый день года соответственно заданной дате:

select trunc(to date(01-SEP-2004), y) from dual

TRUNC(TO DA

01-JAN-2004

Далее к полученной дате с помощью ADD MONTHS добавляем один год (12 месяцев). После этого вычитаем один день, что возвращает нас в последний день года соответственно исходной дате:

select add months(

trunc(to date(01-SEP-2004),y), 12) before subtraction, add months( trunc(to date(01-SEP-2004),y), 12)-1 after subtraction from dual

BEFORE SUBT AFTER SUBTR

01-JAN-2005 31-DEC-2004

Теперь, получив последний день рассматриваемого года, просто применяем TO CHAR и возвращаем трехзначное число, представляющее, каким по счету днем (первым, пятидесятым и т. д.) является последний день года:

select to char(

add months(



Решение

С помощью встроенной функции TRANSLATE замените все буквы и цифры экземплярами определенных символов. Затем выберите только те строки, в которых оба символа встречаются хотя бы по разу. В решении используется синтаксис Oracle, но DB2 и PostgreSQL поддерживают TRANSLATE, поэтому доработать решение, чтобы использовать его для этих платформ, не составит труда:

with v as (

select ClassSummary strings from dual union

select 3453430278 from dual union

select findRow 55 from dual union

select 1010 switch from dual union

select 333 from dual union

select threes from dual

select strings

trunc(to date(01-SEP-2004),y), 12)-1,DDD) num days in 2004

from dual

Поиск смешанных буквенно-цифровых строк Задача

Имеется столбец со смешанными буквенно-цифровыми данными. Требуется выбрать строки, содержащие и буквенные, и числовые символы. Иначе говоря, если в строке присутствуют только числа или только буквы, она нас не интересует. Возвращаемые значения должны сочетать в себе буквы и числа. Рассмотрим следующие данные:

STRINGS

1010 switch 333

3453430278

ClassSummary findRow 55 threes

Окончательное результирующее множество должно содержать только те строки, в которых присутствуют и буквы, и числа:

STRINGS

1010 switch findRow 55



1 ... 175 176 177 [ 178 ] 179 180 181 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика