在unicode列sql server上使用聚合函数[执行计算]

发布于 2024-12-10 07:38:48 字数 155 浏览 0 评论 0原文

我在 sql server 数据库中有一个 unicode 列 nvarchar 。 我将数值存储在本地化的“印度语言古吉拉蒂语”的该列中。 我如何在 nvarchar 列上使用 sum、avg 等聚合函数。

注意:该 nvarchar 列包含本地化语言的 unicode 数据。

I have one unicode column nvarchar in sql server database.
I am storing numeric values in that column in my localized "Indian Language GUJARATI".
How can i use aggregate functions like sum,avg on that nvarchar column.

Note : That nvarchar column contains unicode data in localized language.

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

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

发布评论

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

评论(1

旧人 2024-12-17 07:38:48

我在 sql server 和 .net 中都得到了以下过程。

将英语转换为古吉拉特语 Unicode 并
将古吉拉特语 Unicode 转换为英文数字

.net 代码

public static class global
{
    public static string Translate(string source, string fromStr, string toStr)
    {

        string result = "";
        foreach (var sourceChar in source)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }

    public static string ToGujDig(this object   source)
    {
        string fromStr = ".0123456789";
        string toStr = ".\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0";

        string result = "";
        string s = source.ToString();

        foreach (var sourceChar in s)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }

    public static string ToEngDig(this string  source)
    {
        string fromStr =     ".\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0";
        string toStr = ".0123456789";

        string result = "";
        string s = source.ToString();

        foreach (var sourceChar in s)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }
}

sql server 代码

  1. 传递数值并获取 unicode 值

    创建函数 [dbo].[NumericToUnicode]
    (
          @字符串VARCHAR(50)
    )
    返回 NVARCHAR(50)
    
    开始
    
    声明 @rString NVARCHAR(50) 
    设置@rString=N''
    
    声明@length INT 
    设置@length = LEN(@String)
    
    声明@position INT 
    设置@位置= 1
    
    而@position <= @length
    开始
    
          IF (ASCII(SUBSTRING(@String, @position, 1))) = 46
                设置@rString = @rString + N'。'
          别的
                设置 @rString = @rString + NCHAR(ASCII(SUBSTRING(@String, @position, 1)) + 2742)
                设置@位置=@位置+1
    结尾
    
    返回@rString
    
    结尾
    
    -- 测试一下
    选择 [dbo].[NumericToUnicode]('50.0') 或
    选择 [dbo].[NumericToUnicode](50.12) 
    
  2. 传递 unicode 值并获取数值

    创建函数 [dbo].[UnicodeToNumeric]
    (
        @nString NVARCHAR(50)
    )
    返回数字(12,2)
    开始 
    
    声明 @rString NVARCHAR(50) 
    设置@rString=''
    
    声明@position INT 
    设置@位置=1
    
    WHILE @position <= LEN(@nString)
    开始
        IF (UNICODE(SUBSTRING(@nString, @position, 1))) = 46
            设置 @rString = @rString + CHAR(UNICODE(SUBSTRING(@nString, @position, 1)))
        别的
                    设置 @rString = @rString + CHAR(UNICODE(SUBSTRING(@nString, @position, 1)) - 2742)
        设置@位置=@位置+1
    
    结尾
    
    返回@rString
    结尾
    

希望这有帮助。

I got following procedure in both sql server and .net.

Convert English to Gujarati Unicode and
Convert Gujarati Unicode to English numbers

.net Code

public static class global
{
    public static string Translate(string source, string fromStr, string toStr)
    {

        string result = "";
        foreach (var sourceChar in source)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }

    public static string ToGujDig(this object   source)
    {
        string fromStr = ".0123456789";
        string toStr = ".\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0";

        string result = "";
        string s = source.ToString();

        foreach (var sourceChar in s)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }

    public static string ToEngDig(this string  source)
    {
        string fromStr =     ".\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0";
        string toStr = ".0123456789";

        string result = "";
        string s = source.ToString();

        foreach (var sourceChar in s)
        {
            int pos = fromStr.IndexOf(sourceChar);
            if ((pos >= 0) && (pos < toStr.Length))
            {
                result += toStr[pos];
            }
        }

        return result;
    }
}

sql server code

  1. pass numeric value and get unicode value

    CREATE FUNCTION [dbo].[NumericToUnicode]
    (
          @String VARCHAR(50)
    )
    RETURNS NVARCHAR(50)
    
    BEGIN
    
    DECLARE @rString NVARCHAR(50) 
    set @rString= N''
    
    DECLARE @length INT 
    set @length = LEN(@String)
    
    DECLARE @position INT 
    set @position= 1
    
    WHILE @position <= @length
    BEGIN
    
          IF (ASCII(SUBSTRING(@String, @position, 1))) = 46
                SET @rString = @rString + N'.'
          ELSE
                SET @rString = @rString + NCHAR(ASCII(SUBSTRING(@String, @position, 1)) + 2742)
                SET @position = @position + 1
    END
    
    RETURN @rString
    
    END
    
    -- Test it
    SELECT [dbo].[NumericToUnicode]('50.0')  or
    SELECT [dbo].[NumericToUnicode](50.12) 
    
  2. Pass unicode value and get Numeric value

    Create  FUNCTION [dbo].[UnicodeToNumeric]
    (
        @nString NVARCHAR(50)
    )
    RETURNS NUMERIC(12,2)
    BEGIN 
    
    DECLARE @rString NVARCHAR(50) 
    set @rString=''
    
    DECLARE @position INT 
    set @position=1
    
    WHILE @position <= LEN(@nString)
    BEGIN
        IF (UNICODE(SUBSTRING(@nString, @position, 1))) = 46
            SET @rString = @rString + CHAR(UNICODE(SUBSTRING(@nString, @position, 1)))
        ELSE
                    SET @rString = @rString + CHAR(UNICODE(SUBSTRING(@nString, @position, 1)) - 2742)
        SET @position = @position + 1
    
    END
    
    RETURN @rString
    END
    

Hope this helps.

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