SQL Oracle Как удалить пустые строки, чтобы использовать метод get - PullRequest
0 голосов
/ 05 октября 2019

Не могли бы вы сказать изменить ниже выбрать, чтобы удалить пустые строки из столбца id? Все строки имеют вид:



1D0711BC-A37E-4CDD-A0D1-FF26B9C35991____________________________________________ 
9DC51D0F-C6C9-49AB-B027-CFC067B2CB9E____________________________________________                                                                                                                                            

должно быть:


1D0711BC-A37E-4CDD-A0D1-FF26B9C35991
(explanation:there should be no blank space at the end of 991)
9DC51D0F-C6C9-49AB-B027-CFC067B2CB9E                                                                                                                                            


SELECT  
    to_char(trunc("completed"),'yyyy-mm-dd') as "Data",
    count(*) as "Liczba zamkniętych rachunków" 
  FROM Produkcja2.MV_BPAWORKQUEUEITEM_PERIOD
  LEFT JOIN Produkcja2.MV_BPAWORKQUEUE_PERIOD on Produkcja2.MV_BPAWORKQUEUEITEM_PERIOD."queueid"=Produkcja2.MV_BPAWORKQUEUE_PERIOD."id"
  WHERE Produkcja2.MV_BPAWORKQUEUE_PERIOD."id"=:queueid AND trunc("completed") between '19/03/01' AND (sysdate-1)
  GROUP BY trunc("completed") order by to_char(trunc("completed"),'yyyy-mm-dd') desc

Обновление: все строки имеют одинаковую длину и различаются, например:

  • F121DBB3-96AC-4974-8D88-D39BAFF0CE33
  • 1D0711BC-A37E-4CDD-A0D1-FF26B9C35991

Я добавил функцию RTRIM в предложение where, но у меня возникла ошибка: Не могли бы вы изменить весь сценарий, пожалуйста.

*Cause:    An identifier with more than 30 characters was specified.
*Action:   Specify at most 30 characters.```


SELECT
    to_char(trunc("completed"),'yyyy-mm-dd') as "Data",
    count(*) as "Liczba" 
  FROM Produkcja2.MV_BPAWORKQUEUEITEM_PERIOD
  LEFT JOIN Produkcja2.MV_BPAWORKQUEUE_PERIOD on Produkcja2.MV_BPAWORKQUEUEITEM_PERIOD."queueid"=Produkcja2.MV_BPAWORKQUEUE_PERIOD."id"
  WHERE RTRIM("Produkcja2.MV_BPAWORKQUEUE_PERIOD."id"=:queueid",'                                                                        ') short_name AND trunc("completed") between '19/03/01' AND (sysdate-1)
  GROUP BY trunc("completed") order by to_char(trunc("completed"),'yyyy-mm-dd') desc```


, когда я использовал только ниже, выбор для обрезки идентификатора работает отлично, но, пожалуйста, скажите мне, как добавить ко всему коду

  SELECT
  "id",
  RTRIM("id",'                                                                        ') short_name

FROM
  Produkcja2.MV_BPAWORKQUEUE_PERIOD


Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Если вы уверены, что в столбцах значений идентификатора нет начального пробела, а формат является фиксированным, как уже упоминалось, я полагаю, что основное внимание будет уделено части после последней черты, состоящей из фиксированного числа для цифр и букв и заканчивающейся 991. Поэтому используйте приведенную ниже комбинацию функций substr и instr для извлечения, как и ожидалось, ID:

with tab(ID) as
(
  select '1D0711BC-A37E-4CDD-A0D1-FF26B9C35991' from dual union all
  select '1D0711BC-A37E-4CDD-A0D1-FF26B9C35991  987CA' from dual union all
  select '1D0711BC-A37E-4CDD-A0D1-FF26B9C3599154987CA' from dual  
)
select substr(ID,1,regexp_instr(ID,'-\D{2}\d{2}\D\d\D\d{5}')+
                   length(regexp_substr(ID,'\D{2}\d{2}\D\d\D\d{2}991'))) as ID
  from tab;

Редактировать: При необходимости часть значений ID имеет фиксированную длину, равную образцу (1D0711BC-A37E-4CDD-A0D1-FF26B9C35991) делится в начале, затем его проще извлечь с помощью функции length():

select substr(ID,1,length('1D0711BC-A37E-4CDD-A0D1-FF26B9C35991')) as ID
  from tab;

Демо

0 голосов
/ 05 октября 2019

Вы можете использовать еще одно условие в предложении where с функцией RTRIM следующим образом:

RTRIM(ID) = ID

Это ограничит строки пробелом в конце исходной строки, чтобы удовлетворить условию where.

Если вы хотите, чтобы они отображались в результате, используйте только RTRIM(ID) в предложении select.

RTRIM в основном удаляет все пробелы с правой стороны предоставленной строки.

Cheers!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...