
Як перетворити рядок на число в SQL: докладний посібник
Дізнайтеся, як перетворити дані типу string на тип int в SQL за допомогою простої команди та налаштування таблиці бази даних. Читайте статтю і навчитеся виконувати цю операцію легко. p align="justify"> При роботі з базами даних часто виникає необхідність перетворювати дані з одного типу в інший. Одним із частих випадків є переведення рядка в ціле число (integer). Це можна зробити за допомогою функції CAST або функції CONVERT. У цій статті ми розглянемо обидва способи та дамо докладний гайд із прикладами коду. Для написання прикладів будемо використовувати мову SQL та СУБД MySQL.
Що таке переведення рядка в ціле число?
Переведення рядка в ціле число — це перетворення текстового рядка на ціле значення. У SQL це може бути корисно, наприклад, для обчислень та представлення даних у зручнішому форматі.
Рядок може містити як цифри, так і символи, але для успішного перетворення на число вона повинна відповідати правилам мови запитів SQL. Якщо рядок містить символи, відмінні від цифр, це може призвести до помилки перетворення. Також важливо враховувати розмірність числа: переклад рядкового значення з додатковими символами може призвести до неправильного результату.
- SELECT CONVERT(int, ‘123’) AS converted_num;
- SELECT CONVERT(bigint, '9999999999') AS converted_num;
Читати далі"Кавун крімсон рубі F1: відгуки, терміни та правила посадки".
У першому запиті рядкове значення "123" успішно перетворюється на ціле число типу "int". У другому запиті значення "9999999999" також перетворюється на ціле число, але це значення більше, ніж максимально можливе для типу "int", тому використовується тип "bigint".
Відео на тему:
У чому причина перекладу?
Часто під час роботи з базами даних виникає необхідність перетворити значення з одного типу даних на інший. У випадку рядків і чисел це може бути викликано тим, що значення отримані з різних джерел або збережені в різних форматах. Наприклад, можуть виникнути ситуації, коли дані числового типу були збережені у вигляді рядка, або деякі символи були додані до числового значення, щоб вказати валюту.
Крім того, переведення рядка в число може бути необхідним для виконання математичних операцій або порівняння значень. Наприклад, якщо потрібно обчислити середній вік співробітників, то необхідно скласти всі віки та розділити на їх кількість. Але для цього потрібно спочатку перетворити значення віку з рядкового на числовий тип даних.
Важливо розуміти, що помилки при переведенні рядків у числа можуть призвести до непередбачуваних результатів, тому необхідно використовувати перевірку на можливість перетворення та обробляти винятки у разі помилок.
Перетворення рядка на ціле число в SQL
Коли це необхідно, ви можете перетворити рядок в ціле число SQL за допомогою функції CAST або функції CONVERT.
Функція CAST може бути використана так:
- SELECT CAST('123' AS int)
- SELECT CAST('123' AS bigint)
- SELECT CAST('123' AS float)
Функція CONVERT може бути використана так:
- SELECT CONVERT(int, ‘123’)
- SELECT CONVERT(bigint, '123')
- SELECT CONVERT(float, '123')
Обидві функції повертають ціле число, якщо рядок може бути перетворений на ціле число, інакше вони повертають помилку.
Читати далі"Де і як роблять ключі: назва спеціалізованого місця".
Крім функцій CAST і CONVERT, можна використовувати функцію PARSE, яка підтримується в SQL Server 2012 та пізніших версіях:
- SELECT PARSE('123' AS int)
- SELECT PARSE('123' AS bigint)
- SELECT PARSE('123' AS float)
Функція PARSE працює так, як функції CAST і CONVERT, але повертає NULL замість помилки при невдалому перетворенні.
Важливо враховувати, що при перетворенні рядка на ціле число може статися втрата точності, тому необхідно бути обережними під час використання цього методу.
Як використовувати CAST для перетворення типів даних
CAST-оператор використовується для перетворення одного типу даних на інший. Це дуже корисно, коли дані одного типу необхідно використовувати у виразі, який очікує на інший тип.
Наприклад, якщо вам потрібно перевести рядок у ціле число SQL, ви можете використовувати CAST. Приклад:
SELECT CAST('10' AS int);
В результаті ми отримаємо число 10 як цілий тип даних. Ми можемо використовувати CAST у різних сценаріях, таких як порівняння значень різних типів, створення виразів та інші.
Для використання CAST в SQL приклад синтаксису:
SELECT CAST(column_name AS data_type);
Тут "column_name" - це ім'я стовпця, що містить дані, які необхідно перетворити, а "data_type" - це тип даних, на який ми хочемо перетворити значення. Наприклад:
SELECT CAST(age AS varchar(10)) AS age_string FROM customers;
Цей запит перетворює стовпець «age», який є цілим числом, символьний тип даних varchar(10). Результат містить рядковий стовпець «age_string», який можна використовувати для подальших обчислень.
CAST може також використовуватися для перетворення дати та часу на різні формати. Приклад:
SELECT CAST(date_field AS varchar(10)) AS date_string FROM orders;
Цей запит перетворює стовпець «date_field», який містить дати, символьний тип даних varchar(10).
Використання CAST може покращити продуктивність запиту та зробити його більш надійним, оскільки він допомагає керувати типами даних у базі даних.
Як використовувати CONVERT для перетворення типів даних
Функція CONVERT в SQL використовується для перетворення типів даних з одного формату на інший. Наприклад, якщо ви хочете перетворити рядок на числовий формат, то ви можете використовувати функцію CONVERT.
Синтаксис функції CONVERT виглядає так:
CONVERT(data_type, expression, style)
- data_type — тип даних, на який необхідно виконати перетворення
- expression - Значення, яке необхідно перетворити
- style — використовується для вказівки формату, в якому зберігається значення expression, та для визначення формату перетворення
Наприклад, щоб перетворити рядок на ціле число, можна використовувати таку функцію:
Це перетворює рядок '42' на число 42.
Важливо враховувати, що не всі типи даних можуть бути перетворені на інші типи, і деякі перетворення можуть призвести до втрати даних або спотворення вихідного значення. Тому необхідно уважно вибирати тип даних та стиль перетворення.
Використання функцій TRY_CAST та TRY_CONVERT
Для перетворення рядка в ціле число SQL, можна використовувати функції TRY_CAST і TRY_CONVERT. Вони дозволяють зробити це без помилок, навіть якщо вихідний рядок містить нечислові символи.
Функція TRY_CAST намагається перетворити значення на вказаний тип даних. Якщо це можливо, буде повернено значення у вказаному типі. Якщо перетворення неможливе, то повертається NULL.
Наприклад, для перетворення рядка '123' на ціле число можна використовувати наступний запит:
SELECT TRY_CAST('123' AS INT)
Результатом буде кількість 123.
Функція TRY_CONVERT використовується аналогічно, але як параметр вказується ім'я типу даних, якого потрібно перетворити значення.
Наприклад, для того ж прикладу можна використовувати наступний запит:
SELECT TRY_CONVERT(INT, ‘123’)
Результат буде таким самим – число 123.
Обидві функції можуть бути дуже корисними під час роботи з даними, коли необхідно переконатися, що рядкове значення відповідає певному типу даних.
Використання функції PARSE
Функція PARSE застосовується для перетворення рядка на інший тип даних, у разі, у ціле число (INTEGER). Вона дозволяє отримувати числові значення, виключаючи решту символів.
Загальний синтаксис функції PARSE:
де expression — рядковий вираз для перетворення, а data_type — тип даних, який потрібно перетворити цей рядок.
Наприклад, щоб перетворити рядок '123' на ціле число, можна використовувати наступний запит:
Результатом цього запиту буде 123.
Якщо в рядку є символи, які не є числами, функція PARSE поверне помилку. Щоб уникнути цього, потрібно використовувати функцію TRY_PARSE, яка повертає NULL замість помилки:
Результатом цього запиту буде Null.
Приклади коду з використанням CAST та CONVERT
Перетворення рядка на ціле число за допомогою оператора CAST:
SELECT CAST('10' AS INT);
Внаслідок виконання запиту ми отримаємо ціле число 10.
Перетворення рядка на ціле число за допомогою функції CONVERT:
SELECT CONVERT(INT, '10');
Це також призведе до одержання цілого числа 10.
Перетворення дати в рядок за допомогою функції CONVERT:
SELECT CONVERT(VARCHAR, GETDATE(), 103);
Цей запит перетворює поточну дату та час на формат dd/mm/yyyy.
Перетворення дати та часу в рядок за допомогою функції CONVERT:
SELECT CONVERT(VARCHAR, GETDATE(), 120);
Цей запит перетворює поточну дату та час на формат yyyy-mm-dd hh:mm:ss.
Перетворення числа з плаваючою точкою на ціле число за допомогою функції CAST:
SELECT CAST(10.5 AS INT);
Тут число 10.5 буде округлено до найближчого цілого числа та перетворено на ціле число. Отже, результатом буде число 10.
Перетворення рядка на число з плаваючою точкою за допомогою функції CAST:
SELECT CAST('10.5' AS FLOAT);
Тут рядок ‘10.5’ буде перетворено на число з плаваючою точкою 10.5.
Перетворення числа з плаваючою точкою в рядок за допомогою функції CONVERT:
SELECT CONVERT(VARCHAR, 10.5);
Тут число 10.5 буде перетворено на рядок '10.5'.
Перетворення цілого числа на рядок за допомогою функції CAST:
SELECT CAST(10 AS VARCHAR);
Ціле число 10 буде перетворено на рядок '10'.
Приклади коду з використанням функцій TRY_CAST та TRY_CONVERT
Функція TRY_CAST дозволяє спробувати перетворити значення рядка на ціле число. Якщо перетворення не вдалося, функція поверне NULL.
- SELECT TRY_CAST('123' AS INT); - Поверне 123
- SELECT TRY_CAST('abc' AS INT); - Поверне NULL
Функція TRY_CONVERT також може бути використана для перетворення рядка на ціле число. На відміну від TRY_CAST, вона дозволяє вказати тип даних, який потрібно перетворити значення.
- SELECT TRY_CONVERT(INT, '123'); - Поверне 123
- SELECT TRY_CONVERT(INT, 'abc'); - Поверне NULL
Обидві функції можуть використовуватися в умовних виразах та комплексних запитах, де необхідна подальша обробка даних
Приклади коду за допомогою функції PARSE
У SQL функція PARSE використовується для перетворення рядка на числовий формат.
Нижче наведено приклад використання функції PARSE для перетворення рядка «12345» у ціле число:
SELECT PARSE('12345' AS INT) AS ConvertedValue;
Результат буде виглядати так:
Також можна використовувати функцію PARSE для перетворення числа в інші формати.
SELECT FORMAT(PARSE('1234567890' AS BIGINT), '$#,##0.00') AS ConvertedValue;
Результат буде виглядати так:
Таким чином, функція PARSE може бути корисною для перетворення рядкових значень на числові формати і навпаки, а також для перетворення чисел на інші формати.
Питання-відповідь:
У чому проблема при спробі перевести рядок у ціле число в SQL?
Проблема полягає в тому, що якщо рядок, який ми намагаємося перетворити до цілого числа, міститься нечислове значення, то буде викинута помилка. Це може статися, наприклад, якщо рядок містить пробіли, зайві символи, літери або розділові знаки.
Як можна перетворити рядок на ціле число SQL?
Для перетворення рядкового значення до цілого в SQL використовується функція CAST або функція CONVERT.
Які ще можливості є для перетворення рядкових значень на числові?
У SQL існують різні функції для перетворення рядків на числові значення залежно від необхідного типу даних. Наприклад, функції TRY_CAST, TRY_CONVERT дозволяють без помилок намагатися перетворювати значення рядків у числа.Функція PARSE використовується для перетворення рядків у дати, часи та дати-час.
Чи можна перетворити рядок з десятковою точкою на число SQL?
Так, для цього SQL використовується тип даних NUMERIC або DECIMAL. Наприклад, для перетворення рядка «123.45» на число з двома знаками після десяткової точки можна використовувати такий запит: SELECT CAST('123.45' AS NUMERIC(5, 2));
Які помилки можуть виникнути при перетворенні рядка на число SQL?
Помилки можуть виникнути, якщо рядок містить неприпустимі символи, такі як літери, розділові знаки або пробіли. Також можуть виникнути помилки, пов'язані з виходом за межі типу даних, наприклад, якщо число занадто велике або занадто маленьке для вибраного типу даних.
Чи можна перетворити рядок на число, використовуючи SQL функцію?
Так, у SQL існують спеціальні функції перетворення рядків в числа. Функції, такі як CAST, CONVERT, PARSE, TRY_CAST, TRY_CONVERT можуть допомогти в цьому.
Які типи даних можна використовувати для зберігання цілих чисел SQL?
SQL для зберігання цілих чисел можна використовувати різні типи даних, наприклад INTEGER, BIGINT, SMALLINT і TINYINT. Вибір типу залежить від максимального значення, яке може бути збережене у полі, а також від очікуваного розміру таблиці та швидкості виконання запитів.
Функції конвертації типів даних доступні в SQL
Рядкові функції конвертації типу даних розроблені для зміни типу даних стовпця, виразу або літералу. Найчастіше використовувані функції конвертації це TO_CHAR, TO_NUMBER і TO_DATE. TO_CHAR перетворює числа та дати на символьні дані, коли TO_NUMBER і TO_DATE перетворює символьні дані відповідно на число та дату.
Функції конвертації
Oracle дозволяє визначати стовпці з типами даних ANSI, DB2 та SQL/DS. Ці типи перетворюються на типи даних Oracle. У кожного стовпця визначається тип даних, який обмежує природу даних, які можуть зберігатися в цьому стовпці. Стовпець NUMBER не може зберігати символьну інформацію. Стовпець DATE не може зберігати випадкові символи чи цифри. VARCHAR2 може зберігати символьні еквіваленти чисел та дат.
Якщо функція, в якій вхідний параметр є рядком, отримує на вхід число, Oracle автоматично конвертує його в символьний еквівалент. Якщо функція з вхідними параметрами типу даних число або дата отримує на вхід рядок, повинні дотримуватися певних умов для автоматичної конвертації. Незважаючи на те, що автоматична неявна конвертація доступна, набагато більш зрозуміло і надійно явно конвертувати один тип даних в інший перед викликом малої функції.
Неявна конвертація типів
Значення, які не відповідають типам даних параметрів функції неявно конвертуються перед виконанням, якщо це можливо. Обидва типи даних VARCHAR2 та CHAR використовуються як символьні типи даних. Символьні типи даних є досить гнучкими для зберігання практично будь-якої інформації. Таким чином, ДАТА і ЧИСЛО можна легко перетворити на їх символьний еквівалент. Така конвертація відома як перетворення число в рядок та дата в рядок. Розглянемо такі запити
Query 1: select length(1234567890) from dual
Query 2: select length(SYSDATE) from dual
Обидва запити використовують функцію LENGTH, у якій вхідний параметр визначений як рядок. Число 1234567890 у запиті один неявно конвертується в рядок '1234567890' перед обчисленням функції LENGTH і результат функції буде 10.Запит номер два обчислює функцію SYSDATE припустимо 7 квітня 2008 року. Результат перетворюється на рядок '07-APR-08' і результат виконання функції LENGTH буде 9.
Зазвичай не прийнято допускати неявну конвертацію рядків у числа, оскільки єдина ситуація, коли це можливо, це якщо рядок є валідним числом. Рядок '11' буде неявно перетворений на число 11, але рядок '11.123.345' не буде, як показано в наступних прикладах
Query 3: select mod('11', 2) from dual
Query 4: select mod('11.123', 2) from dual
Query 5: select mod('11.123.456', 2) from dual
Query 6: select mod('$11', 2) from dual
Запити 3 і 4 неявно перетворили рядки '11' та '11.123' у числа 11 та 11.123 відповідно, перед викликом функції MOD яка у свою чергу повернула результат 1 та 1.123. Запит 5 повернув помилку 'ORA-1722: invalid number', коли Oracle спробував неявно перетворити рядок на число, оскільки '11.123.456' не є коректним числом. Запит 6 також повернув помилку так як символ долара не може бути неявно перетворений на число.
Неявна конвертація рядка в дату можлива, коли рядок задовольняє наступним шаблонам: [D|DD] separator1 [MON|MONTH] separator2][R|RR|YY|YYYY], де D та DD це день MON перші три літери місяця, MONTH – повна назва місяця. R та RR YY та YYYY відображають одну, дві та чотири цифри року відповідно. Параметром separator1 і separator2 може бути практично будь-який спеціальний символ, включаючи сюди пробіл, табуляцію, знаки пунктуації і т.д. Таблиця 10-2 показує неявну конвертацію рядка на дату, включаючи виклик функцій роботи з датами та результати. Ці результати припускають, що система використовує американську локаль.
TIP Незважаючи на те, що неявна конвертація типів доступна, краще використовувати явний виклик функції конвертації перед використанням даних в інших функціях. Конвертація рядка в число та дату використовує маску форматування.
Явна конвертація типів даних
Функції, які конвертують значення з одного типу даних в інший відомі як явне перетворення типів. Вони повертають значення, яке буде гарантовано потрібного типу даних та є надійним методом конвертації даних.
Число і дату можна явно конвертувати в рядок, використовуючи TO_CHAR. Рядок можна явно конвертувати в число використовуючи функцію TO_NUMBER. Функція TO_DATE використовується для конвертації рядка в DATE. Маски форматування Oracle дозволяють гнучко контролювати процес конвертації рядка у число чи дату.
Розуміння широко використовуваних масок форматування перевіряється досить просто питаннями виду: який результат поверне виклик функцій TO_CHAR(TO_DATE('01-JAN-00','DD-MON-RR'),'Day').
Використання
функцій TO_CHAR, TO_NUMBER
та TO_DATE
При сертифікації часто використовуються питання про функції TO_NUMBER, TO_DATE і TO_CHAR з прикладами для аналізу. Обговорення функції TO_CHAR розділимо на дві частини: конвертація дати в рядок та конвертація числа в рядок. Такий поділ заснований на тому, що для різних типів даних доступні різні маски форматування. Крім цих функцій існує багато інших, але ці використовуються найчастіше.
Використання функцій конвертації
У багатьох ситуаціях виникає потреба у використанні функцій конвертації, починаючи від форматування дати у звітах і до перевірки чисельних значень символьних стовпчиках перед стартом арифметичних обчислень.
Таблиця 10-3 показує синтаксис малих функцій конвертації даних
Необов'язковий параметр підтримки національного формату (nls_parameters) корисний для вказівки мови та форматування, в якому назви днів, місяців та роздільники розрядів, цілої та дробової частини заздалегідь визначені. На малюнку 10-2 відображено представлення NLS_SESSION_PARAMETERS, яке містить значення параметрів NLS для поточної сесії. За промовчанням значення NLS_CURRENCY – знак долара, але це можна змінити на рівні сесії. Наприклад, для зміни символу валюти на рядок GBP можна виконати запит
ALTER SESSION SET NLS_CURRENCY=GBP
Малюнок 10-2 – Подання NLS_SESSION_PARAMETERS
Конвертація числа в рядок за допомогою функції TO_CHAR
Функція TO_CHAR повертає значення VARCHAR2. Коли вхідним параметром є число, то доступні деякі параметри форматування. Синтаксис команди TO_CHAR(num, [format], [nls_parameter]). Параметр num є обов'язковим і повинен бути числом. Необов'язковий параметр format можна використовувати для вказівки інформації про форматування, такої як довжина, символ валюти, позиція роздільника дробової та цілої частини та роздільник розрядів (три розряди) і має бути укладений у одинарні лапки. Доступні різні опції форматування і частина представлена в таблиці 10-4. Розглянемо два запити
Query 1: select to_char(00001)||' is a special number' from dual;
Query 2: select to_char(00001, '0999999')||' is a special number' from dual;
У запиті номер один у числа 00001 забираються провідні нулі, значення перетворюється на рядок '1' і повертається результат '1 is a special number'. Попит номер два використовує маску форматування '0999999' для числа 00001, перетворюючи число в рядок '0000001' і повертаючи результат '0000001 is a special number'.0 і 6 дев'яток в масці форматування вказують функції TO_CHAR, що необхідно використовувати провідні нулі, і довжина рядка повинна бути 7. Таким чином рядок, що повертається функцією TO_CHAR містить сім символів.
Tip Конвертація чисел у рядки надійний спосіб переконатися, що функція і SQL запит в цілому, який очікує символьного значення, не поверне помилку коли зустрінеться число. Конвертація чисел у рядки часто використовується для форматування значень звітів. Маска форматування підтримує символ валюти, роздільник порядків та роздільник цілої та дробової частини, що часто використовується при відображенні фінансової інформації.
Конвертація дати в рядок, використовуючи TO_CHAR
Ви можете використовувати переваги моделі масок форматування при конвертації ДАТИ практично будь-який варіант відображення дати як символьного значення використовуючи функцію TO_CHAR. Синтаксис функції TO_CHAR(date1, [format], [nls_parameter]).
Тільки параметр date1 є обов'язковим; тоді він має бути значенням, яке може неявно перетворитися на рядок. Необов'язковий параметр format регістрозалежний і повинен бути обрамлений одинарними лапками. Маска форматування вказує, які елементи дати повинні бути обрані і як відображати назви елементів дати: повні назви або абревіатури. Назви днів та місяців автоматично поділяються пробілом. Таку поведінку можна змінити за допомогою параметра маски fill mode (fm). Вказавши на початку маски параметр fm, ви вкажете Oracle про необхідність усунути всі прогалини. Доступно багато опцій маски форматування, частина з яких відображена в таблиці 10-5. Розглянемо три запити
Query 1: select to_char(sysdate)||' is today's date' from dual;
Query 2: select to_char(sysdate,'Month')||'is a special time' from dual;
Query 3: select to_char(sysdate,'fmMonth')||'is a special time' from dual;
Якщо поточна системна дата 3 січня 2009 року і за промовчанням формат відображення DD/MON/RR тоді запит один поверне рядок '03/JAN/09 is todays date'. У другому запиті зверніть увагу на дві деталі: по-перше, тільки місяць вибирається з дати, і по-друге так як маска форматування реєстрозавсім і в запиті використовується 'Month', то запит поверне 'January is a special time'. Немає потреби додавати пробіл на початку літералу, оскільки функція TO_CHAR автоматично додасть пробіл до назви місяця. Якби маска у другому запиті була 'MONTH', то запит повернув би 'JANUARY is a special time'. Параметр fm у третьому запиті перешкоджає додаванню пробілів і результатом буде 'Januaryis a special time'. У таблиці 10-5 передбачається, що обробляється дата 2 червня 1975 року та поточний рік 2009 року.
Параметри форматування, пов'язані з тижнем, кварталом, століттям та іншими елементами дати, що рідко використовуються, показані на малюнку 10-7. Стовпець результату передбачає, що функція використовувалася для роботи з датою 24 вересня 1000 з маскою форматування зазначеної в стовпець format element.
Компонентний час у типі даних дата вибирається, використовуючи моделі форматування в таблиці 10-7. Результат розраховується функцією TO_CHAR, використовуючи дату 27 червня 2010 року, час 21:35:13 з маскою форматування вказаної в стовпці format element.
Деякі різні елементи, які можна використовувати у форматуванні дати та часу, перелічені в таблиці 10-8. Знаки пунктуації використовуються для розділення елементів форматування. Три типи суфіксів існують для форматування елементів. Більш того, символьні літерали можуть бути включені в модель форматування, якщо вони укладені в подвійні лапки.Результати в таблиці 10-8 отримані використовуючи функцію TO_CHAR для дати 12 вересня 2008 14:31 з маскою форматування зазначеної у відповідному стовпці.
Таблиця JOB_HISTORY зберігає інформацію про посади співробітника, які він обіймав у компанії. Запит на малюнку 10-3 вибирає інформацію з цієї таблиці про кінець терміну дії посади співробітника для кожного співробітника на підставі стовпців END_DATE, EMPLOYEE_ID та JOB_ID та форматує результат у гарну пропозицію. Символьний вираз об'єднується з функцією TO_CHAR в якій використовується маска 'fmDay the ddth of Month YYYY'. Параметр fm використовується, щоб прибрати пробіли в імені дня тижня та місяця. Два літерати обмежені подвійними лапками використовуються додавання читабельності результату. Літерал “th” застосовується до елемента дати, щоб зробити літературно правильним відображення дати як 17 th або 31th. 'Month' у масці означає використовувати повне ім'я місяця та нарешті YYYY форматує рік як усі чотири символи року.
Малюнок 10-3 – Запит до таблиці JOB_HISTORY
select 'Employee '||EMPLOYEE_ID||' quit as '||JOB_ID||' on '||TO_CHAR(END_DATE,'fmDay "ddth "of" Month YYYY") "Quitting Date"
Незважаючи на те, що компонент «століття» не відображається за замовчуванням, він зберігається в базі даних і доступний для запиту. Маска форматування DD-MON-RR використовується за замовчуванням для введення значень та відображення. Коли значення додається або змінюється, якщо явно не вказано повік, то використовується повік із функції SYSDATE. Формат RR відрізняється від формату YY і тому що RR також використовує значення століття. Вплив значення століття на формат RR легше зрозуміти, якщо розглянути наступні принципи
- Якщо дві останні цифри поточного року між 0 і 49, а в зазначеному значенні дати дві останні цифри року між 50 і 99, то використовується попереднє століття.Припустимо, що ця дата 2 червня 2007 року. Значення століття для дати 24-JUNE-94 буде 20
- Якщо дві цифри поточного року між 50-99 та вказаною датою також між 55 та 99, то повертається поточне століття. Припустимо, що поточна дата 2 червня 1975 року. Тоді значення століття для 24-JUL-94 буде 20.
- Якщо дві цифри поточної дати між 50 та 99, а в закачаній даті рік між 0 та 49 – то вважається наступне століття. Припустимо, що поточна дата 2 червня 1975 року, тоді значення 24-JUL-07 значення століття буде 21.
Конвертація рядка в дату за допомогою функції TO_DATE
Функція TO_DATE повертає значення типу даних DATE. Рядок, що конвертується в дату може містити всі або частину компонентів, що становлять тип DATE. Коли рядок, що містить лише частину компонентів дати, перетворюється на дату, Oracle використовує значення за замовчуванням для складання валідного значення типу DATE. Частини рядка зіставляються з елементами дати, використовуючи маску (або модель) форматування. Синтаксис функції TO_DATE(string1, [format], [nls_parameter]).
Тільки параметр string1 є обов'язковим, і якщо маска форматування не вказана, string1 повинна бути у формат, що неявно конвертується в дату. Необов'язковий параметр format використовується практично завжди і повинен бути поміщений в одинарні лапки. Маска форматування ідентича перерахованим у таблицях 10-5, 10-6, та 10-7. Функція TO_DATE має модифікатор fx, який використовується подібно до параметра fm функції TO_CHAR. Параметр fx вимагає обов'язкового збігу рядка та маски форматування. Якщо рядок не збігається з маскою, повертається помилка. Розглянемо кілька прикладів
Query 1: select to_date('25-DEC-2010′) from dual;
Query 2: select to_date('25-DEC') from dual;
Query 3: select to_date('25-DEC', 'DD-MON') from dual;
Query 4: select to_date('25-DEC-2010 18:03:45', 'DD-MON-YYYY HH24:MI:SS') from dual;
Query 5: select to_date('25-DEC-10', 'fxDD-MON-YYYY') from dual;
Запит 1 перетворює рядок 25-DEC-2010 і рядок може бути перетворена в дату використовуючи маску DD-MON-YYYY. Дефіс можна замінити іншим розділювачем. Оскільки не було вказано жодної інформації про час, то використовується значення за замовчуванням 00:00:00. Запит 2 не може неявно перетворити рядок на дату, оскільки недостатньо інформації і повертається помилка ORA-01840: input value is not long enough for date format. Вказавши маску DD-MON для рядка '25-DEC' у запиті номер три, Oracle може перетворити значення на дату, але оскільки рік і час не вказано, у значенні року буде використовуватися значення року функції SYSDATE, а час встановлено опівночі. Якщо поточний рік буде 2009, запит 3 поверне дату 25/DEC/09 00:00:00. Запит 4 перетворює рядок із явно вказаними всіма компонентами дати та часу. Запит 5 використовує параметр fx. Так як рік у рядку вказаний двома символами, а необхідний формат передбачає чотири цифри року, то запит повертає помилку ORA-01862: numerical value does no match the length of the format item.
Конвертація рядка до числа використовуючи функцію TO_NUMBER
Функція TO_NUMBER повертає значення типу даних NUMBER. Вихідний рядок повинен бути складений таким чином, щоб усі несумісні символи були відсутні або були вказані у відповідній масці форматування. Синтаксис функції TO_NUMBER(string1, [format], [nls_parameter]). Тільки string1 є обов'язковим параметром, і якщо не вказано параметр format, то значення має бути таким, щоб була можливість неявно конвертувати його в число. Маски форматування ідентичні переліченим у таблиці 10-4. Розглянемо запити
Query 1: select to_number('$1,000.55') from dual;
Query 2: select to_number('$1,000.55','$999,999.99') from dual;
Запит один не може неявно перетворити рядок, оскільки він містить знак валюти та роздільники, які явно не вказані в масці, тому повертається помилка ORA-1722: invalid number. Запит два знаходить символ валюти, коми і точки в масці форматування і незважаючи на те, що довжина маски більша ніж вихідне значення в рядку, повертається число 1000.55
Функція TO_NUMBER конвертує значення рядка до числа. Якщо ви використовуєте число довше, ніж маска, повертається помилка. Якщо ви конвертуєте число, використовуючи довшу маску – повертається значення вихідної довжини. Не плутайте TO_NUMBER із TO_CHAR. Наприклад, TO_NUMBER('123.45','999.9') поверне помилку, коли TO_CHAR(123.45,'999.9') поверне 123.6
Схожі статті
Як вимкнути захист у реальному часі Windows 10 через командний рядокЯк перейти на наступний рядок без введенняЯк зі стовпця зробити рядок в excel через комуЯк перетворити фотографію паспорта на цифровуЩо означає якщо часто бачиш число 666Як зробити відновлення системи Windows 10 через командний рядокЯк прочитати один рядок з файлу зЯк перейти на новий рядок клавішамиНедавні статті
Як бродить зернова брагаЩо робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипатиЯк швидко зняти гель лак без апаратуЯк робиться Каті головиЯка гребінець краще для об'ємуЧим роблять м'яку покрівлюЧи можна залишати крем для обличчя на нічДе знаходиться датчик селектора