如何从Sql Server中的字符串中获取值,

时间:2018-06-11 09:26:55

标签: sql sql-server

如何从Sql Server中的字符串中获取值

示例:我有一个列数据,如“Delhi-123456-PO-2356”。我想使用Sql server从这个字符串中获得唯一的123456(在第一个 - 之后)。

不使用存储过程!!

4 个答案:

答案 0 :(得分:2)

您可以使用parsename()功能:

select *, parsename(replace(col, '-', '.'), 3) as newcol
from table t;

答案 1 :(得分:0)

SELECT SUBSTR("Delhi-123456-PO-2356",7,6) AS answer

解释:函数SUBSTR(data,startIndex,length)

startIndex从0开始计算

答案 2 :(得分:0)

请使用这个原始解决方案:

declare @str nvarchar(256) = N'Delhi-123456-PO-2356';

select left(
     substring(@str, charindex('-', @str) + 1, len(@str) - charindex('-', @str))
    ,charindex('-', substring(@str, charindex('-', @str) + 1, len(@str) - charindex('-', @str))) - 1
);

或更高级:

declare @str nvarchar(256) = N'Delhi-123456-PO-2356';

;with [data] as (
    select [str] =  substring(@str, charindex('-', @str) + 1, len(@str) - charindex('-', @str))
)
select left(
     [str]
    ,charindex('-', [str]) - 1
) from [data];

答案 3 :(得分:0)

无论连字符的数量如何,都应该得到正确的值。

DECLARE @teststring varchar(100) = 'Delhi-123456-PO-2356'

SELECT LEFT(SUBSTRING(@teststring, CHARINDEX('-', @teststring) + 1, LEN(@teststring)), 
            CHARINDEX( '-', SUBSTRING(@teststring
                                    , CHARINDEX('-', @teststring) + 1
                                    , LEN(@teststring))) - 1) 

返回

123456

最佳做法是将4个部分中的每个部分保存到4个单独的列中。将多个值保存到单个字符串中违反了First Normal Form