我需要在SQL Server数据库中将存储为 varchar 的一些数据转换为我想要从 CamelCase 更改为分隔符分隔。我知道如何在C#中做到这一点,而不是T-SQL。有什么想法吗?
答案 0 :(得分:2)
我手头没有SQL Server可以试用,但你需要进行循环测试:
CODE(SUBSTRING (xx, thatpositions, 1)) BETWEEN 64 and 89
然后插入分隔符:
SUBSTRING (xx, 1, thatpositions -1) + delimiter + SUBSTRING (xx, thatpositions, 8000)
答案 1 :(得分:1)
如果您有C#代码来执行此操作,并且正在使用SQL Server 2005+,则可以通过SQLCLR将.NET代码公开为TSQL函数(或存储过程)。检查你是否被允许 - 大部分都没有,为了支持和/或滥用的巨大潜力。另请注意,SQL Server 2005使用.NET 2.0,而SQL Server 2008(包括R2)是.NET v3.5。
This article迎合启用SQLCLR(不需要重启),构建,部署&使用SQLCLR进行正则表达式支持。
我尽可能使用TSQL。
答案 2 :(得分:1)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Alter FUNCTION dbo.GetDelimitedString
(
@CamelCaseString nvarchar(max)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Result_String nvarchar(max)
Select @Result_String = @CamelCaseString
DECLARE @pos INT
DECLARE @DelimiterCount INT
Select @Pos = 2
Select @DelimiterCount = 0
WHILE @pos <= DATALENGTH(@CamelCaseString)
BEGIN
IF ASCII(SUBSTRING(@CamelCaseString, @pos, 1)) BETWEEN 65 AND 90
BEGIN
set @Result_String = STUFF(@Result_String,@Pos + @DelimiterCount,0,',')
Set @DelimiterCount = @DelimiterCount + 1
END
SET @pos = @pos + 1;
END
RETURN @RESULT_STRING
END
你可以使用这个功能 -
select dbo.GetDelimitedString('TestStringInCamelCase')