转换SQL Server数据库中的字符串数据

时间:2010-10-27 19:55:23

标签: sql-server tsql string naming-conventions

我需要在SQL Server数据库中将存储为 varchar 的一些数据转换为我想要从 CamelCase 更改为分隔符分隔。我知道如何在C#中做到这一点,而不是T-SQL。有什么想法吗?

3 个答案:

答案 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')