SQL Oracle — YY от даты и добавления символа

#sql #oracle #join

#sql #Oracle #Присоединиться

Вопрос:

Я прошу вашей помощи по поводу объединения, которое я должен выполнить.

У меня есть поле Date как DD / MM / YYYY. Я должен объединить его в другой таблице с полем с данными типа A14, например, за 2014 год.

Вы знаете, как я могу получить только два последних символа из поля Date, добавить к нему символ A, чтобы объединить с моей другой таблицей?

Спасибо за вашу помощь!

Ответ №1:

просто используйте конкатенацию и to_char с желаемым форматом для вашей даты.

 select 'A'|| to_char(<datefield>, 'YY')
  

Ответ №2:

В качестве альтернативы конкатенации, и если ваше поле даты на самом деле является DATE не строкой, вы можете включить фиксированные значения в модель формата даты, если они заключены в двойные кавычки:

 select to_char(sysdate, '"A"YY') from dual;

TO_
---
A14
  

Итак, чтобы присоединиться к этому, вы могли бы сделать:

 select <columns>
from my_table
join other_table
on other_table.string_column = to_char(my_table.date_column, '"A"YY');
  

Ответ №3:

Если ваше поле datefield имеет тип данных date, то

 SELECT 'A' || TO_CHAR (DATEFIELD, 'YY') FROM MY_TABLE;
  

Пример:

 SELECT 'A' || TO_CHAR (SYSDATE, 'YY') FROM MY_TABLE;
  

Но я предполагаю из вашего примера, что ДАТА — это строка в формате ДД / ММ / ГГГГ
Вероятно, вы можете попробовать что-то вроде,

  1. Преобразуйте строку в дату и получите только год:

    SELECT * FROM OTHER_TABLE
    WHERE FIELD = (SELECT 'A' || TO_CHAR (TO_DATE(DATEFIELD,'DD/MM/YYYY'), 'YY') FROM MY_TABLE;

  2. Просто используйте функцию string — substring, как показано ниже:

    SELECT * FROM OTHER_TABLE
    WHERE FIELD = (SELECT 'A' || substr (DATEFIELD, -2) FROM MY_TABLE;

Для использования join вы можете сделать что-то вроде:

  SELECT * FROM MY_TABLE, OTHER_TABLE
 WHERE OTHER_TABLE.FIELD = ('A' || SUBSTR(MY_TABLE.DATEFIELD, -2);
  

или

  SELECT * FROM MY_TABLE JOIN OTHER_TABLE
 ON OTHER_TABLE.FIELD = ('A' || SUBSTR(MY_TABLE.DATEFIELD, -2);