ЗАМЕНИТЬ строку функцией SUBSTRING

Учитывая входные данные:

      Col1                                        
---------------------------------------
'-'::"varchar" COLLATE "default"            
'-1'::integer                               
'0'::smallint                               
'1'::"varchar" COLLATE "default"            
(get_val())::"timestamp"    
0                                           
0.0                                         
10                                          
210                                         
90000                                       
getdate()       

Я пытаюсь заменить часть строки (столбецCol1) в пустую строку ''.

Хотите заменить что-либо после :: пустой строкой, как показано ниже в ожидаемом результате.

Ожидаемый результат:

      Col1                                        Col2
------------------------------------------------------------------------
'-'::"varchar" COLLATE "default"            '-'
'-1'::integer                               '-1'
'0'::smallint                               '0'
'1'::"varchar" COLLATE "default"            '1'
(get_val())::"timestamp"                    (get_val())
0                                           0
0.0                                         0.0
10                                          10
210                                         210
90000                                       90000
8                                           8
getdate()                                   getdate()

Моя попытка:

      SELECT Col1  REPLACE(REPLACE(Col1,SUBSTRING(Col1,CHARINDEX('::',Col1),LENGTH(Col1)),''),'(''','''') 
FROM  tbl_string_pattern;

Но получение вывода, например:

      Col1                                        Col2
------------------------------------------------------------------------
'-'::"varchar" COLLATE "default"            '-'
'-1'::integer                               '-1'
'0'::smallint                               '0'
'1'::"varchar" COLLATE "default"            '1'
(get_val())::"timestamp"                    (get_val())
0                                           0
0.0                                         0
10                                          0
210                                         0
90000                                       0
8                                           8
getdate()                                   )

1 ответ

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

      DECLARE @DataSource TABLE
(
    [value] VARCHAR(128)
);

INSERT INTO @DataSource ([value])
VALUES ('''-''::"varchar" COLLATE "default"')
      ,('''-1''::integer')
      ,('''0''::smallint')
      ,('''1''::"varchar" COLLATE "default"')
      ,('(get_val())::"timestamp" ')
      ,('0')
      ,('0.0')
      ,('10 ')
      ,('210')
      ,('90000')
      ,('8')
      ,(null)
      ,('')
      ,('getdate()');

SELECT [value]
      ,REPLACE(REPLACE([value],SUBSTRING([value],CHARINDEX('::',[value]),LEN([value])),''),'(''','''') 
      ,IIF(CHARINDEX('::', [value]) > 0, SUBSTRING([value], 0, CHARINDEX('::', [value])), [value])
      -- John Cappellletti's idea
      ,left([value],charindex('::',[value]+'::')-1)
FROM  @DataSource;

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