仅反转sql server中字符串的数字部分

2024-01-04

使用 T-SQL,我试图找到反转字符串中数字的最简单方法。所以对于像这样的字符串Test123Hello have Test321Hello.

[Before]           [After]
Test123Hello       Test321Hello
Tt143 Hello        Tt341 Hello
12Hll              21Hll
Tt123H3451end      Tt321H1543end

你可以使用这个功能

    CREATE  FUNCTION [dbo].[fn_ReverseDigit_MA]
(
    @Str_IN nVARCHAR(max)   
)
RETURNS NVARCHAR(max)
AS
BEGIN   
    DECLARE @lenstr AS INT =LEN(@Str_IN)
    DECLARE @lastdigend AS INT=0


    while (@lastdigend<@lenstr)
    BEGIN

        DECLARE @strPart1 AS NVARCHAR(MAX)=LEFT(@Str_IN,@lastdigend)
        declare @lenstrPart1 AS INT=LEN(@strPart1)
        DECLARE @strPart2 AS NVARCHAR(MAX)=RIGHT(@Str_IN,@lenstr-@lastdigend)

        declare @digidx as int=patindex(N'%[0-9]%'  ,@strPart2)+@lenstrPart1
        IF(@digidx=@lenstrPart1)
        BEGIN
            BREAK;
        END     
        DECLARE @strStartdig AS NVARCHAR(MAX) = RIGHT(@Str_IN,@lenstr-@digidx+1)

        declare @NDidx as int=patindex(N'%[^0-9]%' ,@strStartdig)+@digidx-1
        IF(@NDidx<=@digidx)
        BEGIN
            SET @NDidx=@lenstr+1
        END
        DECLARE @strRet AS NVARCHAR(MAX)=LEFT(@Str_IN,@digidx-1) +REVERSE(SUBSTRING(@Str_IN,@digidx,@NDidx-@digidx)) +RIGHT(@Str_IN,@lenstr-@NDidx+1)
        SET @Str_IN=@strRet
        SET @lastdigend=@NDidx-1        
    END
    return @Str_IN  
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅反转sql server中字符串的数字部分 的相关文章

  • MySQL - 如何将列逆透视到行?

    ID a b c 1 a1 b1 c1 2 a2 b2 c2 如何将行重新组织为ID columntitle value 1 a1 a 1 b1 b 1 c1 c 2 a2 a 2 b2 b 2 c2 c 你正在尝试unpivot数据 My
  • 如何在 SQL Server 2005 中使用存储过程使用 CTE 从分层数据中获取所有子项及其自身

    我有很多类似的结构表 如下所示 CREATE TABLE dbo tbl Hierarchy ID int NOT NULL ParentID int NOT NULL Text nvarchar 100 NOT NULL other fi
  • 与派生表的内连接

    我对连接派生表的基本语法有疑问 这是使用的基本语法吗 select from table1 a inner join select from table2 as T1 on 1 ID T1 ID 那行得通吗 您是在问加入两个子查询吗 尝试
  • 使用 min(datetime) 了解 SQL Server 行为

    长话短说 这只是我的一个愚蠢的假设 我确信一个专栏是一个日期时间 但它不是 所以不要指望在这个问题中找到任何有趣的东西 把它留在这里 以便民主党得到他的正确接受回答 我写了一个像这样的简单查询 SELECT ID MIN DateMadeA
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab
  • Knex 中的表的别名

    我有一个 SQL 查询两次引用同一个表 并且我需要将该表别名为两个单独的别名 我不太清楚如何用 Knex 来编写它 有一个 单词 表和一个 用户 表 Words 表有两个外键 author id 和 winner id 引用 Users 表
  • Yii 添加条件

    我尝试根据我的条件从表中获取行 我的代码 conditions array id gt array 148028 118508 criteria new CDbCriteria foreach conditions as key gt va
  • python 字符串操作

    我有一根绳子s带嵌套括号 s AX p gt q E p Ur 我想删除所有括号对之间的所有字符并存储在新字符串中 如下所示 new string AX E 我尝试这样做 p re compile re DOTALL new string
  • Python:文本文件中的占位符变量

    我有一个名为help txt将被读取并打印出内容 我需要该文件包含变量占位符 其中变量值将被替换 例如 I have 3 variables one two and three 如果这只是 python 文件中硬编码的字符串 我可以将其视为
  • 使用正则表达式删除/匹配字符串之间的引号?

    我有以下一组数据 Production App Old Service Name ProdApp Slave1 Production App Old Service Name ProdApp Slave2 Production App Ol
  • 在 INSERT INTO....RETURNING 上添加 LEFT JOIN

    我的查询插入一个值并返回插入的新行 INSERT INTO event comments date posted e id created by parent id body num likes thread id VALUES 15757
  • 检查 SQL MAX() 函数返回 null

    我的问题是 如果我的表为空或者我使用 max 函数的列没有我指定的值 那么为什么 sqlDataReader hasRows TRUE 它给出了空记录 我该如何解决这个问题 提前致谢 像 MAX 这样的聚合函数将始终为每组返回一行 就您而言
  • C - 比较字符串文字与字符数组

    我是 C 新手 对于如何通过字符数组使用字符串仍然有点困惑 在我的 C 程序中 我接受用户的命令 char command 20 scanf s command 当然 之后我想弄清楚他们输入了什么命令 类似于 if command hell
  • std::vector 的复制构造函数如何运行?

    一个如何std vector
  • 当“”可以分配给std::string时,为什么有“clear”方法?

    一个可以用string clear函数清空字符串 也可以使用空双引号 来执行此操作 有什么不同 当您分配一个空字符串时 编译器必须在数据部分存储一个空的 C 字符串 并创建代码以将指向它的指针传递给赋值运算符 然后 赋值运算符必须从数据部分
  • 打印出 Linq 表达式树层次结构

    The 动态语言运行时 DLR http msdn microsoft com en us library dd233052 aspx有一些非常酷的表达式代码 包括一些非常好的代码来打印我想使用的表达式树 以便 int a 1 int b
  • SQL Server 2005 命名实例端口问题

    我在一台服务器上有 4 个不同的 SQL Server 2005 命名实例 用于测试目的 服务器上没有默认实例 因为我最终需要允许跨防火墙与这些实例进行通信 所以我已将每个实例的端口设置为静态侦听服务器的所有 IP Edit TCP IP
  • 如何在行的列中插入当前日期

    如何将当前日期插入 MS SqlServer Mgm Studio 中 编辑数据 视图中的行列中 我想得到等价的值GetDate 函数调用 这是我希望能澄清问题的图片 您无法键入函数 因此请键入日期或以下解决方案之一 创建默认值GetDat
  • MYSQL 语法在存在 NULL 时不评估不等于

    我在 mysql 查询时遇到问题 我想排除 2 的值 所以我想我会执行以下操作 table products id name backorder 1 product1 NULL 2 product2 NULL 3 product3 2 SE
  • SQL 中 NOT 和 != 运算符有什么区别?

    有什么区别NOT and SQL 中的运算符 我无法理解其中的区别 我猜他们是一样的 NOT negates以下条件 因此它可以与各种运算符一起使用 is the 非标准替代品 https stackoverflow com a 10650

随机推荐