2017-02-09 5 views
2
select 31/10/2016 as date from dual; 

Возвращает мне длинное целочисленное значение.Значение даты возвращает случайное целое число - оракул

Принимая во внимание,

select '31/10/2016' as date from dual; 

дает мне нужный результат.

Что такое трансформация, когда мы даем значение даты без кавычек?

ответ

3

Не из них правильные.

Первый - это арифметическое вычисление.

31/10/2016 = ((31/10)/2016) = 3.1/2016 = 0.00153... 

2-й является строкой

select '31/10/2016' + 1 from dual; 

ORA-01722: неправильный номер


ANSI/ISO Даты литералы записываются в виде

DATE 'YYYY-MM-DD' 

Datetime Literals

В вашем случае

DATE '2016-10-31' 

select DATE '2016-10-31' + 1 from dual; 

2016-11-01 00:00:00


P.S.
date - зарезервированное слово.
Вы не могли бы использовать его как псевдоним для своих столбцов, не получая ошибку синтаксического анализа.

B Oracle Reserved Words, Keywords, and Namespaces

+0

Нужно ли указывать тип данных столбца, префикс жестко закодированных значений? –

+1

Это не тип данных, а часть синтаксиса. Это не так, как вы могли бы заменить его другим типом, например. варчар или что-то в этом роде. –

2

select 31/10/2016: Его арифметические операции (dividation)

select '31/10/2016': Использование цитат его становятся строками. Одиночные кавычки ограничивают строчную константу или константу даты/времени.

2

При выполнении

выберите 31/10/2016 в качестве даты от двойного;

Oracle интерпретирует его как операцию воздушного деления и делит 31 на 10, а результат снова на 2016 год.

При выполнении

выберите '31/10/2016' в качестве даты от двойного;

Oracle интерпретирует его как строку, и он будет вызывать ошибку, поскольку Date является зарезервированным ключевым словом, и вы не можете использовать зарезервированные ключевые слова либо как имена столбцов, либо как псевдоним.

Правильный способ сделать это, как показано ниже:

выберите to_date ('31/10/2016' , 'дд/мм/гггг') в качестве DTE от двойного;