从SQL Server中的字符串特定值解析

时间:2016-01-25 12:50:59

标签: sql sql-server sql-server-2008 parsing

我有一个包含很长字符串的列,我需要能够从字符串中解析出特定的值(即状态名称的值为67-70)。下面是我正在使用的(长)字符串。我假设我可以使用Parsename函数,但我不确定语法。

H0100343107000100000000000151750A P+++++++++++++++++1016   STANLEY     YOUNG                                        17 SPRAYPOINT DRIVE           POINT COOK             FO000006140949525A N                              WEB SITE  S                                    3030      00010VICTORIA                      61409495255                                                                           

2 个答案:

答案 0 :(得分:2)

你应该使用substring

SELECT SUBSTRING('w3resource',4,3);

eso 4,3表示从第4个位置开始直到接下来的3个字符

所以在你的情况下它将是

SELECT SUBSTRING(column_name,67,4);

这完全是关于MYSQL但MS SQL具有相同的功能

SUBSTRING( string, start_position, length )

请检查此链接 http://social.technet.microsoft.com/wiki/contents/articles/17948.t-sql-right-left-substring-and-charindex-functions.aspx

答案 1 :(得分:0)

如果你想从字符串中提取一些东西,你在t-sql中有两个解决方案(没有CLR):

  1. 按职位
  2. 使用分隔符分割字符串
  3. 1 - 位置可以使用的字符串函数是:SUBSTRING,LEFT,RIGHT

    2 - 在基于分隔符的t-sql中拆分字符串没有内置函数。您可以编写函数来拆分它。下面是一些拆分功能:

    CREATE FUNCTION [dbo].[Split]
    (
        @Text VARCHAR(MAX),
        @Delimiter VARCHAR(100),
        @Index INT
    )
    RETURNS VARCHAR(MAX)
    AS BEGIN
        DECLARE @A TABLE (ID INT IDENTITY, V VARCHAR(MAX));
        DECLARE @R VARCHAR(MAX);
        WITH CTE AS
        (
        SELECT 0 A, 1 B
        UNION ALL
        SELECT B, CONVERT(INT,CHARINDEX(@Delimiter, @Text, B) + LEN(@Delimiter))
        FROM CTE
        WHERE B > A
        )
        INSERT @A(V)
        SELECT SUBSTRING(@Text,A,CASE WHEN B > LEN(@Delimiter) THEN B-A-LEN(@Delimiter) ELSE LEN(@Text) - A + 1 END) VALUE      
        FROM CTE WHERE A >0
    
        SELECT      @R
        =           V
        FROM        @A
        WHERE       ID = @Index + 1
        RETURN      @R
    END