1

如何将字符串数据“Test123”拆分为“Test”和“123”两列。

提前致谢。

4

2 回答 2

1

我为此创建了以下函数,如果有其他简单的方法,请在此处更新

/*
SELECT * FROM [dbo].[SPLIT_NUMERIC_STRING] ('TEST1235745DFGBFVNYT HGEFNEYGV  @ADBSD H# CHSC5ae23674523')
*/
CREATE FUNCTION [dbo].[SPLIT_NUMERIC_STRING] 
   (  @ColumnName VARCHAR(MAX)
   ) 
   RETURNS @TABLEOFVALUES TABLE 
      (  NUMERICDATA   VARCHAR(MAX), 
         STRINGDATA VARCHAR(MAX) 
      ) 
AS 
   BEGIN

        DECLARE @Column1 VARCHAR(100)
        DECLARE @Column2 VARCHAR(100)
        DECLARE @StartPosition INT
        DECLARE @String VARCHAR(100)
        DECLARE @NUMBER INT
        DECLARE @ENDPosition INT
        SET @Column1 = ''
        SET @Column2 = ''
        SET @StartPosition = 1

        SELECT @ENDPosition =  LEN(@ColumnName)

        WHILE @ENDPosition > 0 
        BEGIN

            SELECT @String = SUBSTRING(@ColumnName,@StartPosition,1)
            SELECT @NUMBER = ISNUMERIC(@String)

            IF (@NUMBER = 1)
            BEGIN
             SET @Column1 = @Column1 + @String
            END 
            ELSE
             SET @Column2 = @Column2 + @String 

            SET @StartPosition = @StartPosition + 1
            SET @ENDPosition = @ENDPosition - 1
        END
        INSERT INTO @TABLEOFVALUES (NUMERICDATA,STRINGDATA)
        SELECT @Column1 AS NUMERICDATA,@Column2 AS STRINGDATA

      RETURN 

   END
于 2012-07-09T13:40:19.173 回答
0

一些想法:

  1. 构建功能,以便您可以直接在 Sql 中使用正则表达式。示例: http: //www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server-2005-2008
  2. 使用子字符串
  3. 如果字母与数字的长度不固定,您也可以使用 WHILE 循环,并在找到一个数字后一个接一个地抓取一个字符
于 2012-06-26T06:18:23.467 回答