Удалить определенный символ из строки (SQL Server 2012) - PullRequest
1 голос
/ 28 мая 2019

У меня есть вид, из которого я хочу удалить определенный символ в одном из столбцов.В частности, символ «B» из столбца «Фонд» ниже.

enter image description here

Я пытался использовать следующую версию TRIM

  SELECT 
       TRIM('B' FROM [Port_Ticker]) as "Fund"
      ,[BENCH_Ticker] as "Index ID"
      ,format(cast([VALUE_DATE] as Date),'dd/MM/yyyy') as "Updat"
      ,([Port_Risk_Contrib] / 10000000) as "StDev Fund"
      ,([Active_risk_contrib] / 10000000) as "TE"
      ,([BENCH_RISK_CONTRIB] / 100) as "StDev BM"
  FROM [DM_PORTFOLIO_ANALYSIS].[basedata].[PortfolioRiskFigures]
  where [BLOCK_FACTOR] = 'Total'
  and [Port_ticker] = 
  'B1023'
  order by [VALUE_DATE] asc

Что дает мне ошибку

Сообщение 156, Уровень 15, Состояние 1, Строка 3. Неверный синтаксис рядом с ключевым словом "ОТ".

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

Функция Trim() была введена в версии 2017 года.
Естественно, вы не можете использовать его в старых версиях.

Есть несколько способов сделать это, используя replace, как продемонстрировал М. Канарковский в своем ответе, или любой из следующих вариантов:

stuff: STUFF([Port_Ticker], 1, 1, '') As "Fund",
substring: SUBSTRING([Port_Ticker], 2, LEN([Port_Ticker])) As "Fund"
Right: RIGHT([Port_Ticker], LEN([Port_Ticker])-1) As "Fund"

3 голосов
/ 28 мая 2019

Вы можете использовать replace() для этого.В этом случае он будет искать 'B' и заменять его пустой строкой -> ''.Обратите внимание, что эта функция заменит все 'B' из этого столбца.

 SELECT 
       REPLACE([Port_Ticker], 'B', '') as "Fund"
      ,[BENCH_Ticker] as "Index ID"
      ,format(cast([VALUE_DATE] as Date),'dd/MM/yyyy') as "Updat"
      ,([Port_Risk_Contrib] / 10000000) as "StDev Fund"
      ,([Active_risk_contrib] / 10000000) as "TE"
      ,([BENCH_RISK_CONTRIB] / 100) as "StDev BM"
  FROM [DM_PORTFOLIO_ANALYSIS].[basedata].[PortfolioRiskFigures]
  where [BLOCK_FACTOR] = 'Total'
  and [Port_ticker] = 'B1023'
  order by [VALUE_DATE] asc
...