首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据现有列创建新列,该列根据其中的数据类型操作字符,以显示新字符。

问根据现有列创建新列,该列根据其中的数据类型操作字符,以显示新字符。
EN

Stack Overflow用户
提问于 2020-06-30 11:00:24
回答 1查看 122关注 0票数 0

我需要创建一个查询,根据每个字符的数据类型将现有列中的字符更改为新列。例如,如果它是一个字母,将它改为'L‘。如果它是一个数字,将它更改为'N‘,如果它是一个特殊的字符,将它更改为'S’。下面是我想要输出的更清晰的例子:

代码语言:javascript
复制
ColumnA    ColumnB
abcdefg    LLLLLLL
12345      NNNNN
abc123     LLLNNN
a1b2z8     LNLNLN
yre!£456   LLLSSNNN
!???       SSSS

还有几点要补充:

  • 列A是原始列。没有出现字符的模式,它们可以是任意数量的characters
  • Column B是期望的结果。

对不起,如果这没有意义,任何问题,我会尽量让它更清楚。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 11:40:30

你可以做自己的功能:

代码语言:javascript
复制
CREATE FUNCTION [dbo].[GetPattern]
(
    @input NVARCHAR(2000)
)
RETURNS NVARCHAR(2000)
AS
BEGIN
    DECLARE @ResultVar NVARCHAR(2000) = '';
    DECLARE @i INT = 0, @Len INT, @c NCHAR(1);
    SELECT @Len = LEN(@input);

    WHILE (@i < @Len)
    BEGIN
        SET @i = @i + 1;
        SELECT @c = SUBSTRING(@input, @i, 1);

        IF @c BETWEEN 'a' AND 'z' BEGIN SET @ResultVar = @ResultVar + 'L' END
        ELSE IF @c BETWEEN 'A' AND 'Z' BEGIN SET @ResultVar = @ResultVar + 'L' END
        ELSE IF @c BETWEEN '0' AND '9' BEGIN SET @ResultVar = @ResultVar + 'N' END
        ELSE BEGIN SET @ResultVar = @ResultVar + 'S' END;
    END
    
    RETURN @ResultVar
END

接下来你就用它:

代码语言:javascript
复制
SELECT ColumnA, [dbo].[GetPattern](ColumnA) AS ColumnB FROM MyTable
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62655952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档