gpt4 book ai didi

sql - 如何替换字符串中的奇怪模式?

转载 作者:行者123 更新时间:2023-12-01 23:54:04 24 4
gpt4 key购买 nike

我正在用 SQL 创建一个临时过程,因为我有一个用 markdown 编写的表的值,所以它在网络浏览器中显示为呈现的 HTML (markdown 到 HTML 转换).

当前列的字符串如下所示:

Questions about **general computing hardware and software** are off-topic for Stack Overflow unless they directly involve tools used primarily for programming. You may be able to get help on [Super User](http://superuser.com/about)

我目前正在处理粗体和斜体文本。这意味着(在粗体文本的情况下)我将需要替换奇数 N 倍的模式 **<b>甚至是 </b> 的次数.
我看到了replace()但它对字符串的所有模式执行替换。

那么我如何才能只替换奇数或偶数的子字符串呢?

更新: 有些人想知道我使用的是什么架构,所以看看 here .

如果你想再多一个: markdown 样式的超链接到 html 超链接看起来并不那么简单。

最佳答案

使用STUFF函数和一个简单的WHILE循环:

CREATE FUNCTION dbo.fn_OddEvenReplace(@text nvarchar(500), 
@textToReplace nvarchar(10),
@oddText nvarchar(10),
@evenText nvarchar(500))
RETURNS varchar(max)
AS
BEGIN
DECLARE @counter tinyint
SET @counter = 1

DECLARE @switchText nvarchar(10)
WHILE CHARINDEX(@textToReplace, @text, 1) > 0
BEGIN
SELECT @text = STUFF(@text,
CHARINDEX(@textToReplace, @text, 1),
LEN(@textToReplace),
IIF(@counter%2=0,@evenText,@oddText)),
@counter = @counter + 1
END
RETURN @text
END

你可以这样使用它:

SELECT dbo.fn_OddEvenReplace(column, '**', '<b>', '</b>')
FROM table

更新:

这被重写为 SP:

CREATE PROC dbo.##sp_OddEvenReplace @text nvarchar(500), 
@textToReplace nvarchar(10),
@oddText nvarchar(10),
@evenText nvarchar(10),
@returnText nvarchar(500) output
AS
BEGIN
DECLARE @counter tinyint
SET @counter = 1

DECLARE @switchText nvarchar(10)
WHILE CHARINDEX(@textToReplace, @text, 1) > 0
BEGIN
SELECT @text = STUFF(@text,
CHARINDEX(@textToReplace, @text, 1),
LEN(@textToReplace),
IIF(@counter%2=0,@evenText,@oddText)),
@counter = @counter + 1
END
SET @returnText = @text
END
GO

并执行:

DECLARE @returnText nvarchar(500)
EXEC dbo.##sp_OddEvenReplace '**a** **b** **c**', '**', '<b>', '</b>', @returnText output

SELECT @returnText

关于sql - 如何替换字符串中的奇怪模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25048739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com