我想分割一列字符串,如“99 crystal springs road”,并分别获得2个字(99和水晶),并将99更改为一列,并将水晶更新为另一个表的另一列。我怎样才能使用charindex和substring?SQL SERVER 2008 R2字符串拆分
回答
这里是如何做到这一点一些示例代码...
首先,创建这个函数:
CREATE FUNCTION [dbo].[GetStringPart]
(@fullString varchar(200), @pos tinyint)
RETURNS VARCHAR(200) -- return_data_type.
AS
BEGIN
IF @pos IS NULL OR @pos <= 0
SET @pos = 1
declare @secondPart varchar(200),@firstPart varchar(200),@output varchar(200)
declare @firstSpace int, @secondSpace int
set @firstSpace = CHARINDEX(' ', @fullString)
IF @firstSpace <= 0
RETURN ''
ELSE IF @pos = 1
BEGIN
SET @output = LTRIM(RTRIM(SUBSTRING(@fullString, 1, @firstSpace)))
END
ELSE
BEGIN
SET @secondSpace = CHARINDEX(' ', @fullString, CHARINDEX(' ', @fullString)+1) - CHARINDEX(' ', @fullString)+1
IF @secondSpace <= 0
SET @secondSpace = LEN(@fullString) - @firstSpace + 1
SET @output = LTRIM(RTRIM(SUBSTRING(@fullString, @firstSpace, @secondSpace)))
END
RETURN @Output
END
GO
然后你可以使用它像这样:
declare @origTable table(name varchar(100))
insert into @origTable (name) values ('99 crystal springs road')
declare @newTable table(col1 varchar(100), col2 varchar(100))
INSERT INTO @newTable (col1, col2)
SELECT dbo.GetStringPart(name, 1), dbo.GetStringPart(name, 2) FROM @origTable
select * from @newTable
我得到“无效的长度参数传递给左或SUBSTRING函数。” – rsDesigner 2012-02-29 23:50:36
我有一张表,上面有地址记录。拆分地址并只获得前两个单词并转储到另一个表中。我希望我正确地解释这个问题。 – rsDesigner 2012-02-29 23:52:17
该错误的原因可能是因为您在每一行中没有2个空格。我会创建一个函数,然后调用该函数。该函数可以有一些逻辑来检查第二个空间。我修改了上面的答案。 – 2012-03-01 00:17:56
假设你选择“99”和“水晶”只是因为他们是前两个字...
你可以做到这一点我呐一步,但为了便于阅读的解决方案,我已经分离出来
declare @sourceAddresses table
(
address varchar(100)
)
declare @split table
(
address varchar(100),
firstDelimiter int,
secondDelimiter int
)
declare @table table
(
part1 varchar(20),
part2 varchar(20)
)
insert into @sourceAddresses (address) values ('99 crystal springs road')
insert into @sourceAddresses (address) values ('100 elsewhere road')
insert into @split (address, firstDelimiter)
select address, charindex(' ', address)
from @sourceAddresses
update @split
set secondDelimiter = charindex(' ', address, (firstDelimiter+1))
where firstDelimiter > -1
insert into @table (part1, part2)
select substring(address, 0, firstDelimiter), substring(address, (firstDelimiter+1), (secondDelimiter-firstDelimiter))
from @split
where firstDelimiter > -1
and secondDelimiter > -1
select * from @table
我的“插入@table”代码: – rsDesigner 2012-03-01 00:05:54
更新的解决方案使用的是地址源表而不是单个变量地址 – kaj 2012-03-01 00:11:49
这适用于此示例,但是当我使用长度为90个字符的实际数据时,它会抛出残差长度传递给LEFT或SUBSTRING函数。这可能是因为NULLS还是EMPTY?或者如果只有两个词如“9街”? – rsDesigner 2012-03-01 00:19:37
也许是这样的:
首先创建一个获取字符串的一部分功能:
CREATE FUNCTION dbo.GetStringPart (@sep char(1), @s varchar(512),@pos int)
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @output VARCHAR(200)
;WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT
@output=SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END)
FROM Pieces
WHERE [email protected]
RETURN @Output
END
GO
那么你可以很容易做到这一点:
DECLARE @origalTable TABLE(name VARCHAR(100))
INSERT INTO @origalTable
VALUES('99 crystal springs road')
DECLARE @newTable TABLE(col1 VARCHAR(100), col2 VARCHAR(100))
INSERT INTO @newTable (col1, col2)
SELECT dbo.GetStringPart(' ',name, 1), dbo.GetStringPart(' ',name, 2) FROM @origalTable
SELECT * FROM @newTable
DROP FUNCTION dbo.GetStringPart
- 1. 的SQL Server 2008 R2:字符串匹配
- 2. SQL Server 2008从记录字段中拆分字符串
- 3. SQL Server 2008 R2分页
- 4. SQL Server 2008 R2:将列拆分为两部分
- 5. 查找字符串中的任何字母SQL Server 2008 R2
- 6. SQLDependency SQL Server 2008 R2
- 7. SQL Server 2008 R2 OBJECT_ID
- 8. Visual Studio连接字符串 - Microsoft SQL Server 2008 R2
- 9. SQL Server 2008 R2日语错误(NVARCHAR)字符串比较?
- 10. SQL Server 2008 R2无提示安装的连接字符串
- 11. 如何搜索Sql Server 2008 R2存储过程的字符串?
- 12. 从SQL Server 2008 R2 Express升级到SQL Server 2008 R2企业
- 13. 如何将.asp页面的连接字符串写入sql server SQL Server 2008 R2
- 14. 在SQL Server 2008中将字符串拆分成固定长度的部分
- 15. SQL Server 2008 R2:动态分配别名
- 16. SQL Server 2008 R2 - 选择分层数据
- 17. SQL 2008 - 管道分隔字符串拆分
- 18. SQL Server 2008 R2模板字段长度
- 19. SQL Server 2008 R2合并
- 20. sql server 2008 r2 express edition
- 21. Sql Server 2008 R2 Reporting Services
- 22. 的connectionString为SQL Server 2008 R2
- 23. 不能在SQL Server 2008 R2
- 24. ELMAH和SQL Server 2008 R2?
- 25. SQL Server 2008 R2表查询
- 26. PATINDEX在SQL Server 2008 R2
- 27. Attunity Terada - Sql Server 2008 R2
- 28. 检测SQL Server 2008 R2的
- 29. SQL Server 2008 R2的MDX GETDATE()
- 30. SQL Server 2008 R2的性能
什么是规则,为什么你只想要99和水晶?因为他们是前两个字? – kaj 2012-02-29 23:38:43