如何从Sql Server中的字符串中获取值
示例:我有一个列数据,如“Delhi-123456-PO-2356”。我想使用Sql server从这个字符串中获得唯一的123456(在第一个 - 之后)。
不使用存储过程!!
答案 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。