2016-07-29 1 views
0

Вопрос был удален из-за несоблюдения политик SQL-EX.SQL- Удалить пространство для трейдинга и добавить его в начало имени

+0

Любопытно, почему этот вопрос был отклонен? – kbball

+0

Я подозреваю, что в каждой строке есть другое количество пробелов, иначе в чем смысл, да? Другими словами, вам нужно перенести ИМЕЮЩИЕ пространства с конца на передний план? Поддерживает ли этот SQL-EX регулярные выражения? –

+0

@Gary_W вы правы, он поддерживает регулярные выражения –

ответ

0

Попробуйте что-то вроде: -

set name = lpad(trim(name), length(trim(name))+4, ' ') 

Здесь используют TRIM удалить пространство с обеих сторон. использовать LPAD, чтобы добавить что-то на левой стороне с n (4) гольцов

+0

Благодарим вас за ответ, но система не распознает функции lpad или trim ... –

+0

какая система вы используете? –

+0

Встроенная система на SQL-ex.ru –

0

Попробуйте это:

set name = case when len(name) > len(rtrim(name)) 
      then replicate(' ', len(name) - len(rtrim(name))) + rtrim(name) 
      else name 
      end 
+0

«Ваш запрос вернул правильный набор данных в первую (доступную) базу данных, но он вернул неверный набор данных во вторую базу данных проверки». --- Я получил то же сообщение с вашим кодом, как и мое. Но спасибо за помощь! –

+0

Я отредактировал ответ, попробовал новый. Также вы должны посмотреть на данные, чтобы выяснить, что происходит, и почему это не работает. Попробуйте выполнить выбор перед обновлением, чтобы узнать, почему набор данных неверен. – Anand

+0

Len() не считает конечные пробелы, чтобы получить его в счет, вам нужно изменить строку. – Vasily

0

Я не знаком с sql-ex.ru, но если это Oracle совместимы, и вы можете использовать регулярные выражения (или вы на этом этапе обучения) вот путь. Может быть, это даст вам хоть какую-то идею. Первая часть просто устанавливает и использует предложение WITH для создания таблицы (например, временную таблицу в памяти, которая фактически называется Common Table Expression или CTE), называемой битвами, содержащей столбец имен с двумя строками. Каждая точка столбца имени имеет другое количество пробелов в конце. Затем выберите из этого столбца, используя регулярное выражение, которое использует 2 «запоминаемые» группы, окруженные скобками, первая содержит строку до тех пор, пока не будет включена первая ячейка, вторая содержит 0 или более символов пространства, привязанных к концу строки , Сначала замените это на вторую группу (пробелы), а затем первую группу (первую часть строки). Это окружено квадратными скобками, чтобы доказать, что на выходе те же самые пространства были перемещены в начало строки.

SQL> with battles(name) as (
    select 'test2 ' from dual union 
    select 'test1 ' from dual 
    ) 
    select '[' || regexp_replace(name, '(.*?)([ ]*)$', '\2\1') || ']' fixed 
    from battles; 

FIXED 
---------------------------------------------------------------------------- 
[ test1] 
[ test2] 

SQL> 

Я надеюсь, что это решение может быть применено к вашей проблеме или, по крайней мере, дать вам некоторые идеи.

+0

спасибо, что посмотрели. Я прошел через хороший процесс, чтобы сделать это, я ценю это. Однако это не сработает, и мои коллеги не смогли придумать решение. Я написал билет на веб-сайт, посмотрю, что произойдет. –

0
update battles 
set name = case when (len(name+'a')-1) > len(rtrim(name)) 
     then 
replicate(' ', 
(len(name+'a')-1) - len(rtrim(name))) + rtrim(name) 
     else name 
     end 

Len() не означает конечные пробелы. Таким образом, используя (len (name + 'a') - 1).

-1

простой пример ниже ... наслаждайтесь :)

обновление сражений имя набора =

Space (DATALENGTH (имя) - DATALENGTH (RTRIM (имя))) + RTRIM (имя)

где дата в (выберите дату из боев)