我可以用正则表达式替换SQL中的值,比如R或Python中的值吗?

我可以用正则表达式替换SQL中的值,比如R或Python中的值吗?,sql,replace,Sql,Replace,我是SQL新手,我想替换列中的多个值,并使用嵌套的replace语句,但使用起来不太舒服 replace( replace( replace( replace( replace( replace( replace(Event, 'HTTPS://LIVE', ''), 'HTTPS://RU', ''),

我是SQL新手,我想替换列中的多个值,并使用嵌套的replace语句,但使用起来不太舒服

replace(
    replace(
     replace(
      replace(
        replace(
         replace(
            replace(Event, 'HTTPS://LIVE', ''), 
                        'HTTPS://RU', ''), 
                                'HTTPS://SELECT', ''), 
                                    'HTTPS://SOUP', ''),
                                        'HTTPS://PRIVET', ''),
                                            '/EN', '')

我可以创建一个向量并基于该向量过滤列吗?谢谢

这是一个非常大的示例,但是您可以看到如何让Python内联运行。您至少需要MSSQL 2017。此外,您还必须像这样为SQL启用/安装Python。注意,它安装自己的Python版本,您可以安装软件包等

有很多关于启用Python的教程,所以我将不深入讨论这些细节,但这里有一些可运行的代码可以作为起点

IF OBJECT_ID('DATATABLE') IS NOT NULL
    DROP TABLE [dbo].[DATATABLE]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[DATATABLE](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [VALUE] [varchar](50) NOT NULL,
 CONSTRAINT [PK_DATATABLE] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[DATATABLE] ADD  CONSTRAINT [DF_DATATABLE_VALUE]  DEFAULT ('') FOR [VALUE]
GO

INSERT INTO [dbo].[DATATABLE]
([VALUE])
VALUES
('apple'),
('orange'),
('pear')

GO

IF OBJECT_ID('usp_fruit') IS NOT NULL
    DROP PROCEDURE usp_fruit
GO

CREATE PROCEDURE usp_fruit
AS

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
#convert the data frame to a dict, then back to dataframe for output
import re
import pandas as pd
MyDict = dict(zip(MyInput.id, MyInput.value))
MyNewDict = {}
for key, value in MyDict.items():
    #upper case third character if it is a lower case p, for example
    value = re.sub("^(..)p(.*)", "\\1P\\2", value)
    MyNewDict[key] = "".join([value, " is a fruit"])

MyOutput = pd.DataFrame.from_dict(MyNewDict, orient="index", dtype=None)
MyOutput.index.name = "Keys"
MyOutput.reset_index(inplace=True)

#if you just want to do a simple regex in the dataframe:
#MyOutput = MyInput
#MyOutput = pd.DataFrame(mydict)
#MyOutput["value"].replace("ap{0,2}(le)", "where is \\1 fruit", inplace=True, regex=True)
',
@input_data_1_name = N'MyInput',
@input_data_1 = N'SELECT ID as id, VALUE as value FROM DATATABLE',
@output_data_1_name = N'MyOutput'
WITH RESULT SETS ((RESULTID INT, RESULTVALUE VARCHAR(50)))
GO

IF OBJECT_ID('tempdb..#DATATABLE_TEMP') IS NOT NULL
    DROP TABLE #DATATABLE_TEMP
GO

CREATE TABLE #DATATABLE_TEMP (RESULTID INT, RESULTVALUE VARCHAR(50))
GO

INSERT INTO #DATATABLE_TEMP
EXEC usp_fruit
GO

SELECT RESULTID, RESULTVALUE FROM #DATATABLE_TEMP

SQL的哪个版本?在MSSQL 2017中,您实际上可以内联编写Python。我知道这是一个旧版本(不是2018年),也许我应该将计算机上的SQL更新为最新版本。当然感谢您,如果您对python或R感到满意,您可以用SQL编写合法的代码。我将用一个例子来回答。