Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да премахнете крайните интервали след името на месеца в Oracle

Ако някога сте използвали TO_CHAR() функция за форматиране на дата, която използва името на месеца, може да сте забелязали, че понякога месецът се връща с десен допълване.

Това се случва по подразбиране, когато името на месеца е по-кратко от най-дългото име на месеца въз основа на използвания език и календар.

Например, ако езикът ви е английски и календарът е григориански, най-дългото име на месеца е септември, което е с девет знака. Ако върнете месеца от дата и е да речем март (с дължина от пет знака), тогава по подразбиране март ще има четири крайни интервала (5 + 4 =9).

За щастие е лесно да премахнете тази дясна подплата, ако е необходимо. За да премахнете дясната подплата, използвайте fm модификатор на формат.

Проблемът

Първо, ето проблема, който се опитваме да разрешим:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Резултат:

08-MARCH    -2030

Можем да видим, че има голяма разлика между името на месеца и годината. Ако не искаме тази празнина, можем да използваме fm модификатор, както е показано по-долу.

Решението

Сега ето решението:

SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Резултат:

8-MARCH-2030

Сега няма разлика между месеца и годината.

Всичко, което направих, беше да добавя предварителния модел на формата с fm .

fm модификаторът на формат означава „Режим на запълване“. По подразбиране Oracle използва крайни празни знаци и водещи нули, за да запълни форматните елементи до постоянна ширина. Ширината е равна на ширината на дисплея на най-големия елемент за съответния модел на формат. Използване на fm модификаторът потиска всички такива запълвания.

Може би сте забелязали, че fm модификаторът също така потисна водещата нула на номера на деня. Ако не искаме това, можем да поставим fm модификатор пред MONTH форматен елемент вместо това.

Като това:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;

Резултат:

08-MARCH    -2030

Този път fm не беше приложен към деня, но беше прилага се към месеца и годината.

Ако не искаме да потискаме водещите нули от годината, тогава трябва да добавим още един fm преди годината.

Ето един пример, който илюстрира какво имам предвид:

SELECT 
    TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
    TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;

Резултат:

            r1               r2 
______________ ________________ 
08-MARCH-30    08-MARCH-0030   

Първата колона използва само един fm (пред MONTH ).

Втората колона използва два fm модификатори (един пред MONTH и един пред YYYY ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е причината/полезността е да се използва ключова дума ENABLE в изразите на базата данни на Oracle

  2. Как да идентифицираме невалидни (повредени) стойности, съхранени в колони DATE на Oracle

  3. Sql*plus винаги връща код за изход 0?

  4. Екраниране на контролни знаци в Oracle XDB

  5. Как да сравним две таблици колона по колона в oracle