кодесурса
«Oracle

Oracle Literals

script1adsense2code
script1adsense3code

литералы

Термины литерал относятся к фиксированному значению данных. Например, «DAVID», «w3resource» и «405» являются символьными литералами; 4567 - числовой литерал. Символьные литералы заключены в одинарные кавычки, чтобы Oracle мог отличить их от имен объектов схемы. Здесь мы обсудили синтаксические и структурные правила для написания следующих элементов операторов Oracle.

  • Текстовые литералы
  • Числовые литералы
  • Datetime Literal
  • Интервальные литералы

Текстовые литералы

Текст указывает текст или символьный литерал. Используйте эту нотацию для указания значений всякий раз, когда текст или символ появляются в выражениях, условиях, функциях SQL и инструкциях SQL в других частях этой ссылки. Текст, символ и строковые литералы всегда заключаются в одинарные кавычки. В этой ссылке взаимозаменяемо используются термины «текстовый литерал» и «буквенный символ»

Синтаксис:

 [{N | n}]
{'[c] ...'
| {Q | q} 'quote_delimiter c [c] ... quote_delimiter'
}

Куда:

  • N или n указывает литерал с использованием национального набора символов. Текст, введенный с использованием этой записи, при использовании переводится в национальный набор символов Oracle. В верхней ветке синтаксиса:
  • c - любой член набора символов пользователя. Одной кавычке (') внутри литерала должен предшествовать escape-символ. Чтобы представить одну кавычку внутри литерала, введите две одинарные кавычки.
  • '' - это две одинарные кавычки, которые начинаются и заканчиваются текстовыми литералами.
  • Q или q указывает, что будет использоваться альтернативный механизм цитирования. Этот механизм допускает широкий диапазон разделителей для текстовой строки.
  • Самые внешние '' - это две одинарные кавычки, которые предшествуют и следуют соответственно открывающему и закрывающему quote_delimiter.
  • c - любой член набора символов пользователя. Вы можете включить кавычки (") в текстовый литерал, состоящий из символов c. Вы также можете включить quote_delimiter, если за ним сразу не следует ни одна кавычка.
  • quote_delimiter - это любой одно- или многобайтовый символ, кроме пробела, табуляции и возврата. Quote_delimiter может быть одинарной кавычкой. Однако, если quote_delimiter появляется в самом текстовом литерале, убедитесь, что за ним сразу же не стоит одна кавычка.

Вот некоторые допустимые текстовые литералы:

  • 'W3resource'
  • 'W3resource.com'
  • Плащ Давида
  • '11 -01-2015'
  • N'nchar буквальный '

Вот некоторые допустимые текстовые литералы, использующие альтернативный механизм цитирования:

  • q '! name LIKE'% СУБД _ %% '!'
  • q '<' Итак, - сказала она, - она закончена. '>'
  • q '{SELECT * FROM сотрудников, ГДЕ last_name =' Smith ';}'
  • nq'ï Ÿ1234 ï '
  • q '"имя как' ['"'

Числовые литералы

Числовая буквенная нотация используется для указания чисел с фиксированной и плавающей точкой. Числа с плавающей точкой используют «.» в качестве десятичного разделителя. Оба типа чисел могут предшествовать '+' или '-', чтобы указать положительные или отрицательные числа. Вы можете использовать целочисленную запись в выражениях, условиях, функциях SQL и инструкциях SQL. Примеры целых чисел следующие:

Синтаксис целого числа:

 [+ | -] цифра [цифра] ...

где цифра - один из 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Целое число может хранить максимум 38 цифр точности.

Вот несколько допустимых целых чисел:

 8
+256

NUMBER и литералы с плавающей точкой

Синтаксис числа следующий:

 [+ | -]
{цифра [цифра] ... [. ] [цифра [цифра] ...]
| , цифра [цифра] ...
}
[e [+ | -] цифра [цифра] ...]
[F | г]

где

  • + или - указывает положительное или отрицательное значение. Если вы опустите знак, то по умолчанию будет положительное значение.
  • цифра одна из 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9.
  • E или E указывает, что число указано в научной записи. Цифры после E указывают показатель степени. Показатель степени может варьироваться от -130 до 125.
  • f или F указывает, что число является 32-разрядным двоичным числом с плавающей запятой типа BINARY_FLOAT.
  • d или D указывает, что это 64-битное двоичное число с плавающей запятой типа BINARY_DOUBLE.

Примеры некоторых допустимых литералов NUMBER:

  • 100
  • 15,26
  • 0,25
  • 25e-04
  • -125

Примеры некоторых допустимых литералов чисел с плавающей точкой:

  • 35f
  • + 5.26F
  • 0.2d
  • -1D

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

Пример таблицы: сотрудники


binary_float_nan:

Значение типа BINARY_FLOAT, для которого выполняется условие IS NAN

Пример:

SQL> SELECT COUNT(*) FROM employees 
WHERE TO_BINARY_FLOAT(commission_pct) != BINARY_FLOAT_NAN;

Пример вывода:

 COUNT (*)
 ----------
 35

binary_float_infinity:

Строка символов Unicode переменной длины, имеющая символы максимального размера.

Пример:

SQL> SELECT COUNT(*) FROM employees 
WHERE salary < BINARY_FLOAT_INFINITY;

Пример вывода:

 COUNT (*)
 ----------
 107 

binary_double_nan:

Значение типа BINARY_DOUBLE, для которого выполняется условие IS NAN

Пример:

SQL> SELECT COUNT(*) FROM employees 
WHERE TO_BINARY_FLOAT(commission_pct) != BIN
ARY_DOUBLE_NAN;

Пример вывода:

 COUNT (*)
 ----------
 35 

binary_double_infinity:

Двойная точность положительной бесконечности.

Пример:

SQL> SELECT COUNT(*)
2    FROM employees
3 WHERE salary < BINARY_DOUBLE_INFINITY;

Пример вывода:

 COUNT (*)
 ----------
 107 

Datetime Literal

База данных Oracle поддерживает следующие типы данных datetime:

  • ДАТА
  • TIMESTAMP
  • TIMESTAMP с зоной времени
  • TIMESTAMP с локальной зоной времени

ДАТА Литералы:

Вы можете указать значение DATE в виде строкового литерала или преобразовать символьное или числовое значение в значение даты с помощью функции TO_DATE.

Чтобы указать значение DATE в качестве литерала, вы должны использовать григорианский календарь. Вы можете указать литерал ANSI следующим образом:

 ДАТА 2015-01-02

В литерале данных ANSI нет временной части, и ее следует указывать в формате «ГГГГ-ММ-ДД». Кроме того, вы можете указать значение даты Oracle следующим образом:

 TO_DATE ('15 -JAN-02 17:30 ',' YY-MON-DD HH24: MI ')			

Формат даты по умолчанию для значения Oracle DATE определяется параметром инициализации NLS_DATE_FORMAT. Приведенный выше пример формата даты включает двузначное число для дня месяца, сокращение названия месяца, две последние цифры года и 24-часовое обозначение времени. Oracle автоматически преобразует символьные значения в формате даты по умолчанию в значения даты, когда они используются в выражениях даты.

Если значение даты указано без компонента времени, то по умолчанию будет полночь (00:00:00 или 12:00:00 для 24-часового и 12-часового часового времени соответственно).

Если значение даты указано без даты, то датой по умолчанию является первый день текущего месяца.

Столбцы Oracle DATE всегда содержат поля даты и времени. Поэтому, если вы запрашиваете столбец DATE, вы должны либо указать поле времени в своем запросе, либо убедиться, что для полей времени в столбце DATE задано значение полуночи. В противном случае Oracle может не вернуть ожидаемые вами результаты запроса. Вы можете использовать функцию даты TRUNC, чтобы установить поле времени в полночь, или вы можете включить в запрос условие больше или меньше, чем условие равенства или неравенства.

Вот несколько примеров, которые предполагают проверку таблицы с числовым столбцом row_num и столбцом DATE datecol:

SQL> INSERT INTO test VALUES (SYSDATE);
1 row created.
SQL> SELECT * FROM TEST;

Пример вывода:

 dATE_COL
---------
02-JAN-15
SQL> SELECT *
FROM TEST
WHERE DATE_COL > TO_DATE('02-JAN-15','DD-MON-YY');

Пример вывода:

 dATE_COL
---------
02-JAN-15

Если вы знаете, что поля времени вашего столбца DATE установлены на полночь, вы можете запросить свой столбец DATE, как показано в предыдущем примере, или с помощью литерала DATE:

SQL> SELECT *
2  FROM TEST
3  WHERE DATE_COL = DATE '2015-01-02';

Пример вывода:

 dATE_COL
---------
02-JAN-15

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

SQL> SELECT *
2    FROM TEST
3    WHERE TRUNC(date_col) = DATE '2015-01-02';

Пример вывода:

 dATE_COL
---------
02-JAN-15
02-JAN-15

Oracle применяет функцию TRUNC к каждой строке в запросе, поэтому производительность будет лучше, если вы обеспечите полуночное значение временных полей в ваших данных. Чтобы убедиться, что поля времени установлены на полночь, используйте один из следующих методов во время вставок и обновлений:

  • Используйте функцию TO_DATE для маскировки полей времени:
     ВСТАВЬТЕ В ТЕСТ
    2 ЗНАЧЕНИЯ (3, TO_DATE ('02-01-2014 '' DD-MON-YYYY '));
    
  • Используйте литерал DATE:
     ВСТАВЬТЕ В ТЕСТ
      ЦЕННОСТИ (4, 02-ЯНВ-15);
    
  • Используйте функцию TRUNC:
     ВСТАВЬТЕ В ТЕСТ
      ЗНАЧЕНИЯ (5, TRUNC (SYSDATE));
    

Функция даты SYSDATE возвращает текущую системную дату и время. Функция CURRENT_DATE возвращает текущую дату сеанса. Для получения информации о SYSDATE, функциях даты и времени TO_ * и формате даты по умолчанию см. «Функции даты и времени».

TIMESTAMP Литералы:

Тип данных TIMESTAMP хранит следующие значения:

  • год
  • месяц
  • день
  • час
  • минут
  • второй
  • дробная секунда

Когда вы указываете TIMESTAMP в качестве литерала, значение дробное_секундное_прецизионное значение может быть любым числом цифр до 9, как показано ниже:

 TIMESTAMP '1997-01-31 09: 26: 50.124'

TIMESTAMP с ВРЕМЕННЫМИ ЗОНАМИ Литералы:

Тип данных TIMESTAMP WITH TIME ZONE - это вариант TIMESTAMP, который включает имя региона часового пояса или смещение часового пояса. Когда вы указываете TIMESTAMP WITH TIME ZONE в качестве литерала, значение дробное_секундное_преобразование может быть любым числом цифр до 9. Например:

 TIMESTAMP '1997-01-31 09: 26: 56.66 +02: 00'

Два значения TIMESTAMP WITH TIME ZONE считаются идентичными, если они представляют один и тот же момент времени в UTC, независимо от смещений TIME ZONE, хранящихся в данных. Например,

 TIMESTAMP '1999-04-15 8:00:00 -8: 00'

такой же как

 TIMESTAMP '1999-04-15 11:00:00 -5: 00'

8:00 по тихоокеанскому стандартному времени совпадает с 11:00 по восточному поясному времени.

Вы можете заменить смещение UTC элементом формата TZR (имя региона часового пояса). Например, следующий пример имеет то же значение, что и предыдущий пример:

 TIMESTAMP '1999-04-15 8:00:00 США / Тихий океан'

Чтобы устранить неоднозначность граничных случаев, когда переключается летнее время, используйте как TZR, так и соответствующий элемент формата TZD. Следующий пример гарантирует, что предыдущий пример вернет значение летнего времени:

 TIMESTAMP '1999-10-29 01:30:00 США / Тихоокеанский регион PDT'

Вы также можете выразить смещение часового пояса, используя выражение datetime:

 SELECT TIMESTAMP '2009-10-29 01:30:00' В ВРЕМЕННОЙ ЗОНЕ 'США / Тихий океан'
  ОТ ДВОЙНОГО;

Если вы не добавили элемент формата TZD, а значение datetime неоднозначно, Oracle возвращает ошибку, если для параметра сеанса ERROR_ON_OVERLAP_TIME установлено значение TRUE. Если для этого параметра задано значение FALSE, Oracle интерпретирует неоднозначную дату и время как стандартное время в указанном регионе.

TIMESTAMP с локальными литералами зоны времени

Тип данных TIMESTAMP WITH LOCAL TIME ZONE отличается от TIMESTAMP WITH TIME ZONE тем, что данные, хранящиеся в базе данных, нормализуются к часовому поясу базы данных. Смещение часового пояса не сохраняется как часть данных столбца. Там нет букв для TIMESTAMP с локальной зоной времени. Скорее, вы представляете значения этого типа данных, используя любой из других допустимых литералов даты и времени. В следующей таблице показаны некоторые форматы, которые можно использовать для вставки значения в столбец TIMESTAMP WITH LOCAL TIME ZONE, а также соответствующее значение, возвращаемое запросом.

Значение, указанное в инструкции INSERT Значение, возвращаемое запросом
'02-2015' -январь 02 января 2015.00.00.000000 утра
SYSTIMESTAMP 02-ЯНВ-15 02.54.36.497659 PM
TO_TIMESTAMP ('02-Январь-2015 ',' ДД-МЕС-ГГГГ ') 02 января 15.00.00.000000
SYSDATE 02-ЯНВ-15 02.55.29.000000 PM
TO_DATE ('02-Январь-2015 ',' ДД-МЕС-ГГГГ ') 02 января 15.00.00.000000
TIMESTAMP'2015-01-02 8:00:00 США / Тихий океан ' 02-ЯНВ-15 08.00.00.000000

Обратите внимание, что если указанное значение не включает компонент времени (явный или неявный), то возвращаемое значение по умолчанию равно полуночи.

Интервальные литералы

Интервал литерал указывает период времени. Вы можете указать эти различия в терминах лет и месяцев или дней, часов, минут и секунд. База данных Oracle поддерживает два типа интервальных литералов: ГОД-МЕСЯЦ и ДЕНЬ-ВТОРОЙ. Каждый тип содержит начальное поле и может содержать конечное поле. Ведущее поле определяет основную единицу измерения измеряемой даты или времени. Заднее поле определяет наименьшее приращение рассматриваемой базовой единицы. Например, интервал ГОД-МЕСЯЦ учитывает интервал лет до ближайшего месяца. Интервал ДЕНЬ ДО МИНУТ учитывает интервал дней до ближайшей минуты.

Если у вас есть данные даты в числовой форме, то вы можете использовать функцию преобразования NUMTOYMINTERVAL или NUMTODSINTERVAL для преобразования числовых данных в значения интервала.

Интервальные литералы используются в основном с аналитическими функциями.

ИНТЕРВАЛ ГОДА В МЕСЯЦ:

Укажите литералы интервала YEAR TO MONTH, используя следующий синтаксис:

 INTERVAL 'integer [- integer]' {YEAR | MONTH} [(точность)] [TO {YEAR | МЕСЯЦ}]

где

  • 'integer [-integer]' определяет целочисленные значения для начального и необязательного конечного поля литерала. Если ведущее поле - ГОД, а конечное поле - МЕСЯЦ, диапазон целочисленных значений для поля месяца - от 0 до 11.
  • точность - это максимальное количество цифр в ведущем поле. Допустимый диапазон точности ведущего поля - от 0 до 9, а его значение по умолчанию - 2.

Ограничение на ведущем поле

Если вы указываете конечное поле, оно должно быть менее значимым, чем ведущее поле. Например, INTERVAL '0-1' MONTH TO YEAR недействителен.

Следующий интервал ИНТЕРВАЛ ГОДА В МЕСЯЦ указывает интервал 123 года, 2 месяца:

 ИНТЕРВАЛ '123-2' ГОДА (3) ДО МЕСЯЦА

Далее следуют примеры других форм литерала, включая некоторые сокращенные версии:

Форма интервального литерала интерпретация
ИНТЕРВАЛ '123-2' ГОДА (3) ДО МЕСЯЦА Интервал 123 года, 2 месяца. Вы должны указать точность ведущего поля, если она больше, чем значение по умолчанию из 2 цифр.
ИНТЕРВАЛ '123' ГОДА (3) Интервал 123 года 0 месяцев.
ИНТЕРВАЛ '300' МЕСЯЦ (3) Интервал 300 месяцев.
ИНТЕРВАЛ '4' ГОДА Карты для ИНТЕРВАЛА '4-0' ГОДА В МЕСЯЦ и показывают 4 года.
ИНТЕРВАЛ '50' МЕСЯЦ Карты в ИНТЕРВАЛ «4-2» ГОДА В МЕСЯЦ и показывают 50 месяцев или 4 года 2 месяца.
ИНТЕРВАЛ '123' ГОДА Возвращает ошибку, поскольку точность по умолчанию равна 2, а «123» имеет 3 цифры.

Вы можете добавлять или вычитать один ИНТЕРВАЛЬНЫЙ ГОД К МЕСЯЦЕЛИТЕРАЛЬНОМУ или от другого, чтобы получить другой литерал ИНТЕРВАЛЬНОГО ГОДА В СКОРОСТЬ Например:

 ИНТЕРВАЛ '5-3' ГОДА В МЕСЯЦ + ИНТЕРВАЛ'20 'МЕСЯЦ = 
ИНТЕРВАЛ '6-11' ГОДА В МЕСЯЦ

ИНТЕРВАЛЬНЫЙ ДЕНЬ ВТОРОЙ

Укажите интервал DAY TO SECOND, используя следующий синтаксис:

 ИНТЕРВАЛ '{целое число | целое время time_expr | time_expr} '{{DAY | ЧАС | МИНУТА} [(lead_precision)] | ВТОРОЙ [(lead_precision [, фракция_seconds_precision])]} [ДО {ДЕНЬ | ЧАС | МИНУТА | ВТОРОЙ [(fraal_seconds_precision)]}]

где

  • целое число указывает количество дней. Если это значение содержит больше цифр, чем число, указанное в ведущей точности, Oracle возвращает ошибку.
  • time_expr указывает время в формате HH [: MI [: SS [.n]]] или MI [: SS [.n]] или SS [.n], где n указывает дробную часть секунды. Если n содержит больше цифр, чем число, указанное в дробной части_секунды_precision, то число n округляется до количества цифр, указанного в значении дробной_секунды_precision. Вы можете указать time_expr после целого числа и пробела, только если ведущее поле - DAY.
  • lead_precision - количество цифр в ведущем поле. Допустимые значения: от 0 до 9. По умолчанию установлено значение 2.
  • fraal_seconds_precision - количество цифр в дробной части поля ВРЕМЯ datetime. Допустимые значения: от 1 до 9. По умолчанию установлено значение 6.

Ограничение на ведущем поле:

Если вы указываете конечное поле, оно должно быть менее значимым, чем ведущее поле. Например, INTERVAL MINUTE TO DAY недействителен. В результате этого ограничения, если SECOND является ведущим полем, у литерала интервала не может быть завершающего поля.

Допустимый диапазон значений для конечного поля:

  • ЧАС: от 0 до 23
  • МИНУТА: от 0 до 59
  • ВТОРОЙ: от 0 до 59.999999999

Далее следуют примеры различных форм литералов INTERVAL DAY TO SECOND, включая некоторые сокращенные версии:

Форма интервального литерала интерпретация
ИНТЕРВАЛ '3 6: 12: 10.225' ДЕНЬ ВТОРОЙ (3) 3 дня, 6 часов, 12 минут, 10 секунд и 225 тысячных секунды.
ИНТЕРВАЛ '3 6:12' ДЕНЬ В МИНУТУ 3 дня, 6 часов и 12 минут.
ИНТЕРВАЛ «300 6» ДЕНЬ (3) ЧАС 300 дней 6 часов.
ИНТЕРВАЛ '300' ДЕНЬ (3) 300 дней
ИНТЕРВАЛ '10: 12: 10.2222222 'ЧАС ВТОРОЙ (7) 10 часов, 12 минут и 10,2222222 секунды.
ИНТЕРВАЛ '10: 20 'ЧАСОВ В МИНУТУ 10 часов и 20 минут.
ИНТЕРВАЛ '10' ЧАС 10 часов.
ИНТЕРВАЛ '10: 22 'МИНУТА ВТОРОЙ 10 минут 22 секунды.
ИНТЕРВАЛ '10' МИНУТА 10 минут.
ИНТЕРВАЛ '3' ДЕНЬ 3 дня.
ИНТЕРВАЛ '25' ЧАС 25 часов
ИНТЕРВАЛ '40' МИНУТА 40 минут
ИНТЕРВАЛ '120' ЧАС (3) 120 часов
ИНТЕРВАЛ '30 .12345 'ВТОРОЙ (2,4) 30.1235 секунд. Дробная секунда «12345» округляется до «1235», потому что точность равна 4.

Вы можете добавить или вычесть один интервал DAY TO SECOND из другого литерала DAY TO SECOND. Например.

 ИНТЕРВАЛ'20 'ДЕНЬ - ИНТЕРВАЛ'240' ЧАС = ИНТЕРВАЛ'10-0 'ДЕНЬ ВТОРОЙ

Предыдущая: Типы данных
Далее: унарные и бинарные операторы

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code