Как удалить ведущий символ из числовой строки? SQL

У меня есть список результатов турниров из данных тура PGA, и я хотел бы удалить букву «T» в начале строк столбца финиша, где это применимо, чтобы я мог получить среднее число. Длины строк являются переменными, а также содержат «CUT» в некоторых строках. Есть ли способ убрать букву «Т»?

Я использовал...

WHERE Finish not like "CUT" 

удалить значения "CUT"

и безуспешно использовали различные функции для удаления буквы «Т». Любая помощь будет принята с благодарностью! Спасибо

Отображение строк переменной длины в столбце «Готово»

Обновлено:

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

SELECT

DISTINCT(player),
  ROUND(AVG(CAST(sg_putt as numeric)),2) as avg_sg_putt, 
  ROUND(AVG(CAST(sg_arg as numeric)),2) as avg_sg_arg, 
  ROUND(AVG(CAST(sg_app as numeric)),2) as avg_sg_app, 
  ROUND(AVG(CAST(sg_ott as numeric)),2) as avg_sg_ott, 
  ROUND(AVG(CAST(sg_t2g as numeric)),2) as avg_sg_t2g, 
  ROUND(AVG(CAST(sg_total as numeric)),2) as avg_sg_total,
  SUM(made_cut) as cuts_made,
  COUNT(DISTINCT(tournament_id)) as total_played,

FROM

`pga_stats_2015_2022.stats`

WHERE 

season >= 2017 AND
sg_putt not like "NA" AND
sg_arg not like "NA" AND
sg_app not like "NA" AND
sg_ott not like "NA" AND
sg_t2g not like "NA" AND
sg_total not like "NA"


GROUP BY player
HAVING total_played > 50
ORDER BY(avg_sg_total) DESC

Что-то вроде: SELECT REPLACE('Учебник по SQL', 'T', 'M'); может работать (здесь я заменяю t на m). Я не знаю, пытаетесь ли вы обновить данные или выбрать. Но этот пример может помочь вам. Вот с ним же поиграть w3schools.com/sql/…

N Subedi 01.02.2023 18:29

Может быть, мне нужно обновить значения столбца?? Я попытался ЗАМЕНИТЬ, но продолжаю получать сообщение об ошибке «ни группировщик, ни агрегированный» в отношении столбца завершения. Возможно, потому что я уже группирую по игрокам?

Wesley Edward 01.02.2023 19:27
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из документации здесь, кажется, вы хотите REPLACE:

REPLACE(original_value, from_value, to_value)

Так, например,

SELECT REPLACE(Finish,'T','') as Finish
FROM yourTable
WHERE Finish <> 'CUT'

Обновлено:

Глядя на ваш полный запрос, я подозреваю, что вы хотите добавить:

ROUND(AVG(CAST(REPLACE(Finish,'T','') as numeric)),2) as avg_Finish

к вашему SELECT.

Затем добавьте:

WHERE Finish <> "CUT" 

к вашему WHERE

Я попытался использовать REPLACE, как указано, и получил... «Выражение списка SELECT ссылается на столбец Finish, который не сгруппирован и не агрегирован в [13:11]»

Wesley Edward 01.02.2023 19:13

Обновлено: Затем добавил оператор GROUP BY и получил... "Недопустимое числовое значение: T72"... так что кажется, что T все еще там.

Wesley Edward 01.02.2023 19:15

@WesleyEdward Не могли бы вы поделиться полным запросом? Отредактируйте свой вопрос и добавьте его в

Aaron Dietz 01.02.2023 19:27

Спасибо, Аарон! Я добавил полный (функциональный) запрос выше в исходном сообщении.

Wesley Edward 01.02.2023 19:37

@WesleyEdward Взгляните на мою правку, посмотрите, это то, что вам нужно.

Aaron Dietz 01.02.2023 20:08

ДА! Я пытался выполнить операторы AVG(CAST() и REPLACE() отдельно, и мне кажется, что эта вложенная установка — именно то, что доктор прописал. Спасибо!!!

Wesley Edward 01.02.2023 21:24

@WesleyEdward Хорошая сделка, рад помочь

Aaron Dietz 01.02.2023 21:32

Возможно ltrim поможет

select ltrim(finish,'T') --might want to cast to int before calculating avg
from..
where..

Обратите внимание, что ltrim удаляет все вхождения слева, поэтому, например, он удалит T как из T6, так и из TT6.

Другие вопросы по теме