Вопрос был удален из-за несоблюдения политик SQL-EX.SQL- Удалить пространство для трейдинга и добавить его в начало имени
ответ
Попробуйте что-то вроде: -
set name = lpad(trim(name), length(trim(name))+4, ' ')
Здесь используют TRIM
удалить пространство с обеих сторон. использовать LPAD
, чтобы добавить что-то на левой стороне с n (4)
гольцов
Благодарим вас за ответ, но система не распознает функции lpad или trim ... –
какая система вы используете? –
Встроенная система на SQL-ex.ru –
Попробуйте это:
set name = case when len(name) > len(rtrim(name))
then replicate(' ', len(name) - len(rtrim(name))) + rtrim(name)
else name
end
«Ваш запрос вернул правильный набор данных в первую (доступную) базу данных, но он вернул неверный набор данных во вторую базу данных проверки». --- Я получил то же сообщение с вашим кодом, как и мое. Но спасибо за помощь! –
Я отредактировал ответ, попробовал новый. Также вы должны посмотреть на данные, чтобы выяснить, что происходит, и почему это не работает. Попробуйте выполнить выбор перед обновлением, чтобы узнать, почему набор данных неверен. – Anand
Len() не считает конечные пробелы, чтобы получить его в счет, вам нужно изменить строку. – Vasily
Я не знаком с 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>
Я надеюсь, что это решение может быть применено к вашей проблеме или, по крайней мере, дать вам некоторые идеи.
спасибо, что посмотрели. Я прошел через хороший процесс, чтобы сделать это, я ценю это. Однако это не сработает, и мои коллеги не смогли придумать решение. Я написал билет на веб-сайт, посмотрю, что произойдет. –
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).
простой пример ниже ... наслаждайтесь :)
обновление сражений имя набора =
Space (DATALENGTH (имя) - DATALENGTH (RTRIM (имя))) + RTRIM (имя)
где дата в (выберите дату из боев)
Любопытно, почему этот вопрос был отклонен? – kbball
Я подозреваю, что в каждой строке есть другое количество пробелов, иначе в чем смысл, да? Другими словами, вам нужно перенести ИМЕЮЩИЕ пространства с конца на передний план? Поддерживает ли этот SQL-EX регулярные выражения? –
@Gary_W вы правы, он поддерживает регулярные выражения –