Я использую Oracle SQL и хочу знать, как два запроса ниже возвращают то же самое, что и иногда, а иногда и другой результат.SQL: using substr вместе с to_char
select substr(to_char(min_code + 10, '099'),1,3)
from x
where a = b;
select substr(min_code + 10,1,2)
from x
where a = b;
1-запрос имеет длину зиЬзЬг значения 3, в то время как второй запрос имеет длину SubStr значения 2. Тем не менее, когда min_code равно 151 оба запроса вернется 16. Как это возможно?
Я понимаю, что это должно быть связано с тем, как substr вычисляет длину при использовании to_char, но я понимаю, что второй аргумент (1 в этих случаях) - это то, где должна начинаться подстрока, а третий аргумент - длина подстроки. Тем не менее, первый запрос по-прежнему возвращает 16 вместо 161, как я мог себе представить.
Затем, когда я тестирую его с записью, где min_code будет равен 051, первый запрос вернет 06, тогда как второй запрос вернет 61. Я понимаю, как второй запрос получает 61, поскольку он должен отбрасывать ведущее 0 при выполнении арифметическая операция НО, как на самом деле 1-й запрос (с функцией to_char) возвращает 06. Я ожидал бы, что 061 будет равно 3.
Try 'select '|' || to_char (151, '099') || '|' от double', затем отредактируйте маску формата в ''FM099''; это должно помочь вам найти проблему – Aleksej