我有一个包含很长字符串的列,我需要能够从字符串中解析出特定的值(即状态名称的值为67-70)。下面是我正在使用的(长)字符串。我假设我可以使用Parsename函数,但我不确定语法。
H0100343107000100000000000151750A P+++++++++++++++++1016 STANLEY YOUNG 17 SPRAYPOINT DRIVE POINT COOK FO000006140949525A N WEB SITE S 3030 00010VICTORIA 61409495255
答案 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 )
答案 1 :(得分:0)
如果你想从字符串中提取一些东西,你在t-sql中有两个解决方案(没有CLR):
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