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

发布于 2024-09-29 05:25:52 字数 159 浏览 2 评论 0原文

我需要将 SQL Server 数据库中存储为 varchar 的一些数据转换为 CamelCase 更改为 分隔符分隔。我知道如何在 C# 中简单地执行此操作,但不知道如何在 T-SQL 中执行此操作。有什么想法吗?

I need to convert some data stored as varchar in a SQL Server database that I want to change from CamelCase to delimiter-separated. I know how to do this trivially in C# but not T-SQL. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

渔村楼浪 2024-10-06 05:25:52

我手头没有 SQL Server 可供尝试,但您需要循环测试:

CODE(SUBSTRING (xx, thatpositions, 1)) BETWEEN 64 and 89

然后插入分隔符:

SUBSTRING (xx, 1, thatpositions -1) + delimiter + SUBSTRING (xx, thatpositions, 8000)

I haven't SQL Server on hand to try, but you need a loop testing for:

CODE(SUBSTRING (xx, thatpositions, 1)) BETWEEN 64 and 89

Then insert your delimiter:

SUBSTRING (xx, 1, thatpositions -1) + delimiter + SUBSTRING (xx, thatpositions, 8000)
[旋木] 2024-10-06 05:25:52
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')
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

And you can use this function -

select dbo.GetDelimitedString('TestStringInCamelCase')
迷爱 2024-10-06 05:25:52

如果您有 C# 代码来执行此操作,并且使用的是 SQL Server 2005+,则可以通过 SQLCLR 将 .NET 代码公开为 TSQL 函数(或存储过程)。检查您是否被允许——大多数人不允许,因为出于支持和/或滥用的巨大可能性。另请注意,SQL Server 2005 使用 .NET 2.0,而 SQL Server 2008(包括 R2)则使用 .NET v3.5。

本文旨在启用 SQLCLR(不需要重新启动)、构建、部署和使用 SQLCLR 来支持正则表达式。

不过,我倾向于尽可能使用 TSQL。

If you have C# code to do this, and are using SQL Server 2005+, you can expose the .NET code as a TSQL function (or stored procedure) via SQLCLR. Check that you're allowed -- most don't, for sake of support and/or great potential for misuse. Also be aware that SQL Server 2005 uses .NET 2.0 while SQL Server 2008 (incl. R2) is .NET v3.5.

This article caters to enabling SQLCLR (doesn't require a restart), building, deploying & using a SQLCLR for regex support.

It's my preference to use TSQL whenever possible though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文