我可以用正则表达式替换SQL中的值,比如R或Python中的值吗?
我是SQL新手,我想替换列中的多个值,并使用嵌套的replace语句,但使用起来不太舒服我可以用正则表达式替换SQL中的值,比如R或Python中的值吗?,sql,replace,Sql,Replace,我是SQL新手,我想替换列中的多个值,并使用嵌套的replace语句,但使用起来不太舒服 replace( replace( replace( replace( replace( replace( replace(Event, 'HTTPS://LIVE', ''), 'HTTPS://RU', ''),
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编写合法的代码。我将用一个例子来回答。