|
|
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
помогите разобраться, в чем проблема. Вот этот запрос Код: plsql 1. 2. 3. возвращает данные нормально, а этот Код: plsql 1. 2. 3. при подстановке null не возвращает ничего. Причем экспериментально выяснил, что второй запрос 1920 преобразует к 2020, из-за чего данных и нет. NLS_DATE/TIMESTAMP_FORMAT базы dd-mon-rr. Если выставить nls форматы в mm/dd/yyyy в сессии, все чудесным образом начинает работать правильно. Это какая-то фишка sql developer'а или я что-то не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 16:38 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito, Неявные преобразования типов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 17:33 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito.. при подстановке null не возвращает ничего. Причем экспериментально выяснил, что второй запрос 1920 преобразует к 2020, из-за чего данных и нет. NLS_DATE/TIMESTAMP_FORMAT базы dd-mon-rr. Если выставить nls форматы в mm/dd/yyyy в сессии, все чудесным образом начинает работать правильно. Это какая-то фишка sql developer'а или я что-то не так делаю? если ваши данные застряли в прошлом веке, то любой формат даты с двузначным годом вам не подойдёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 17:53 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
так где неявные преобразования где? Я же явно задаю формат строки, которая должна преобразоваться в timestamp. А дальше сравниваются два timestamp. to_timestamp неправильно преобразует или сравнение двух дат требует еще каких-то приведений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 18:18 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunitoтак где неявные преобразования где?Первый аргумент nvl какого типа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 18:22 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito, Код: plsql 1. 2. отрабатывает нормально. Ищи ошибку у себя в таблице, руках, голове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 20:47 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
-2-Первый аргумент nvl какого типа? я туда null подставляю. В принципе аргумент можно заменить на null и все будет так же не работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 16:56 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
Michael Isaevdaunito, Код: plsql 1. 2. отрабатывает нормально. Ищи ошибку у себя в таблице, руках, голове. Спасибо, кэп! select sysdate from dual, кстати тоже неплохо работает. Часто ли sysdate возвращает null? Даты из того же 21 века. К чему пример-то был? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 16:58 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunitoMichael Isaevdaunito, Код: plsql 1. 2. отрабатывает нормально. Ищи ошибку у себя в таблице, руках, голове. Спасибо, кэп! select sysdate from dual, кстати тоже неплохо работает. Часто ли sysdate возвращает null? Даты из того же 21 века. К чему пример-то был? Капитан неочевидность, ты все таки к рукам то присмотрись, и почитай внимательно, что тебя спрашивали и что тебе советовали Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 21:15 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Усё работает в Oracle SQL Developer-е ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 21:44 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
-2-Первый аргумент nvl какого типа? в случае если первый элемент - параметр или null, что к чему будет приводится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 18:00 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito-2-Первый аргумент nvl какого типа?в случае если первый элемент - параметр или null, что к чему будет приводится?При чём тут мы? Задай этот вопрос сперва себе, даунище. А потом, если у тебя конечно же есть проплаченное потным долларам право, у разработчика того (недо)гуя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 18:18 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunitoв случае если первый элемент - параметр или null, что к чему будет приводится? Доку не курим всвязи c всеобщей борьбы с курением? NVL The arguments expr1 and expr2 can have any data type. If their data types are different, then Oracle Database implicitly converts one to the other. If they cannot be converted implicitly, then the database returns an error. The implicit conversion is implemented as follows: If expr1 is character data, then Oracle Database converts expr2 to the data type of expr1 before comparing them and returns VARCHAR2 in the character set of expr1. Код: plsql 1. Байнд переменная у тебя конечно VARCHAR2/CHAR. В результате NVL неявно преобразуeт to_timestamp('10/01/1920', 'mm/dd/yyyy') обратно в строку согласно формату по умолчанию который как пить дать имеет только две последние цифры года, т.е. 20. Затем при сравнении с a.alert_date строка с годом 20 преобразуется в DATE/TIMESTAMP и voila - год 2020. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 18:40 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
ElicПри чём тут мы? Задай этот вопрос сперва себе, даунище. А потом, если у тебя конечно же есть проплаченное потным долларам право, у разработчика того (недо)гуя. Уж ты тут точно ни при чем. Ни разу ничего полезного от тебя не слышал. 2 SY, Доку в первую очередь перечитал. Там про нумерики и строковые типы. Про даты и null ничего не сказано. Если убрать bind переменную и просто подставить null, то точно так же не работает. Как в этом случае будут приводится типы нигде инфы не нашел. По здравому смыслу, если первый параметр явно null, то должен вернуться второй, который to_timestamp. И все выражение как бы должно быть timestamp, который потом сравнивается с timestamp. Но так не происходит. Поэтому решил уточнить у товарищей где подвох. И, сцуко, конечно же сразу тонны говна полились, как в анекдоте про американский, еврейский и русский форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 01:34 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunitoПоэтому решил уточнить у товарищей где подвох. И, сцуко, конечно же сразу тонны говна полились, как в анекдоте про американский, еврейский и русский форум.Дебилито, RTFM NVL (FAQ) : "If expr1 is character data, then Oracle Database converts expr2 to ..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 09:57 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
daunito2 SY, Доку в первую очередь перечитал. Там про нумерики и строковые типы. Ну так " Байнд переменная у тебя конечно VARCHAR2/CHAR " SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 14:53 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
Ну-ну Не надо кричать С биндами понятно А вот с константой... Действительно трудно объяснить, что литерал NULL в данном случае (nvl(null, systimestamp)) по умолчанию является CAST(NULL as VARCHAR) и второй аргумент будет приводится именно к VARCHAR И ведь где-то в доке(?) я про такое умолчание видел, но вот сходу не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 15:37 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровИ ведь где-то в доке(?)Это нуллство ведь и dumpом не проверить на тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 18:59 |
|
||
|
странное поведение oracle sql developer, сравнение дат
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНе надо кричать Вячеслав, Я ведь пытaлся. Вроде разжевал - дальшe некуда и все равно не дошло. Видать плохой я учитель . Вячеслав ЛюбомудровДействительно трудно объяснить, что литерал NULL в данном случае (nvl(null, systimestamp)) по умолчанию является CAST(NULL as VARCHAR) и второй аргумент будет приводится именно к VARCHAR Ты путаешь ситуацию когда NULL нет с чем сравнить с ситуацeй когда есть. Когда нет (например при создании представления с полем литерал NULL или сравниваются два литералa NULL или в качестве выражения на базе которого определяется тип данных результата указан литерал NULL), то Oracle использует VARCHAR2. А в остальных случаях литерал NULL типа не имеет и посему неявно преобразуется к типу другого операнда. Так-что с литералом NULL проблемы 1920/2020 нет: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 21:13 |
|
||
|
|

start [/forum/topic.php?fid=52&gotonew=1&tid=1886980]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
13ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 575ms |

| 0 / 0 |
