Sql server SQL Server:如何根据下一个字符替换来自字符串

Sql server SQL Server:如何根据下一个字符替换来自字符串,sql-server,Sql Server,仅当下一个字符不是/1~的数字时,我需要替换所有出现的/ 结果应该是 Declare @string nvarchar (400) ='5 kg/ 8 s/ m/ 9 l/ o' 有没有捷径 提前谢谢。您需要在这些方面做点什么 声明@string nvarchar(400)='5 kg/8 s/m/9 l/o' 声明@stringLength INT 选择@stringLength=LEN(@string) 声明@counter INT 选择@counter=1 而@counter则需要在这

仅当下一个字符不是
/1~
的数字时,我需要替换所有出现的
/

结果应该是

 Declare @string nvarchar (400) ='5 kg/ 8 s/ m/ 9 l/ o'
有没有捷径


提前谢谢。

您需要在这些方面做点什么

声明@string nvarchar(400)='5 kg/8 s/m/9 l/o' 声明@stringLength INT 选择@stringLength=LEN(@string)

声明@counter INT 选择@counter=1


而@counter则需要在这些行中执行一些操作

声明@string nvarchar(400)='5 kg/8 s/m/9 l/o' 声明@stringLength INT 选择@stringLength=LEN(@string)

声明@counter INT 选择@counter=1


而@counter则需要在这些行中执行一些操作

声明@string nvarchar(400)='5 kg/8 s/m/9 l/o' 声明@stringLength INT 选择@stringLength=LEN(@string)

声明@counter INT 选择@counter=1


而@counter则需要在这些行中执行一些操作

声明@string nvarchar(400)='5 kg/8 s/m/9 l/o' 声明@stringLength INT 选择@stringLength=LEN(@string)

声明@counter INT 选择@counter=1



当@counter时,您有什么理由尝试在数据库中执行此操作吗?SQL Server没有正则表达式,在客户端使用正则表达式要容易得多。我同意@Panagiotis!给他一杯!是的,我正在为批处理从字符串创建一个单位转换函数。其中,若在单元名称之前并没有输入数字,只是为了在单元名称之前自动插入1,那个么SQL Server不直接支持正则表达式。您可以使用CLR,以下是一些示例:谢谢…………您有任何理由尝试在数据库中这样做吗?SQL Server没有正则表达式,在客户端使用正则表达式要容易得多。我同意@Panagiotis!给他一杯!是的,我正在为批处理从字符串创建一个单位转换函数。其中,若在单元名称之前并没有输入数字,只是为了在单元名称之前自动插入1,那个么SQL Server不直接支持正则表达式。您可以使用CLR,以下是一些示例:谢谢…………您有任何理由尝试在数据库中这样做吗?SQL Server没有正则表达式,在客户端使用正则表达式要容易得多。我同意@Panagiotis!给他一杯!是的,我正在为批处理从字符串创建一个单位转换函数。其中,若在单元名称之前并没有输入数字,只是为了在单元名称之前自动插入1,那个么SQL Server不直接支持正则表达式。您可以使用CLR,以下是一些示例:谢谢…………您有任何理由尝试在数据库中这样做吗?SQL Server没有正则表达式,在客户端使用正则表达式要容易得多。我同意@Panagiotis!给他一杯!是的,我正在为批处理从字符串创建一个单位转换函数。其中,若在单元名称之前并没有输入数字,只是为了在单元名称之前自动插入1,那个么SQL Server不直接支持正则表达式。您可以使用CLR,以下是一些示例:谢谢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
5 kg/ 8 s/1~m/ 9 l/1~o
DECLARE @string nvarchar (400) ='5 kg/ 8 s/ m/ 9 l/ o'
DECLARE @result nvarchar(400)= '' 

SELECT @result += '/' +case when t.c.value('.', 'VARCHAR(2000)') not like ' [0-9]%' 
  then stuff(t.c.value('.', 'VARCHAR(2000)'), 1,1, '1~') 
  else t.c.value('.', 'VARCHAR(2000)') end
FROM (
    SELECT x = CAST('<t>' + 
          REPLACE(' '+@string, '/', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)

SELECT stuff(@result, 1,2,'')
5 kg/ 8 s/1~m/ 9 l/1~o