#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;
Но я предполагаю из вашего примера, что ДАТА — это строка в формате ДД / ММ / ГГГГ
Вероятно, вы можете попробовать что-то вроде,
-
Преобразуйте строку в дату и получите только год:
SELECT * FROM OTHER_TABLE
WHERE FIELD = (SELECT 'A' || TO_CHAR (TO_DATE(DATEFIELD,'DD/MM/YYYY'), 'YY') FROM MY_TABLE; -
Просто используйте функцию 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);