SQL语句拆分表中内容,并变成两列

如何通过sql语句,把一列中的数据读出来,并把字母和数字分开,变成两列,比如:列名“Column1”,里面有若干含A123,B23,BD21这种字母加数字的数据,如何把它... 如何通过sql语句,把一列中的数据读出来,并把字母和数字分开,变成两列,比如:列名“Column1”,里面有若干含A123,B23,BD21这种字母加数字的数据,如何把它们分成两列成为A,B,BD|123,23,21这样子的 展开
 我来答
Richard2380
推荐于2016-06-22 · 超过12用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:32.7万
展开全部

if exists (select 1 from sysobjects where name = 'uf_get_value' and xtype = 'FN')
 drop function uf_get_value
go
create function uf_get_value(@value VARCHAR(100))
--获取列默认值
returns VARCHAR(100) as
begin
 declare @rtn VARCHAR(100), @tmp VARCHAR(100), @status CHAR(1)
 
 SET @rtn = ''
 SET @tmp = ''
 WHILE len(@value) > 0
 BEGIN
  IF ascii(substring(@value, 1, 1)) =  ascii(',')
  BEGIN
   SET @value = RIGHT(@value, len(@value) - 1)
   CONTINUE
  END
  IF ascii(substring(@value, 1, 1)) BETWEEN ascii('0') AND ascii('9')
  BEGIN 
   SET @tmp = @tmp + substring(@value, 1, 1)
      SET @status = 'N'
  END
  ELSE
  BEGIN
   SET @rtn = @rtn + substring(@value, 1, 1)
      SET @status = 'S'
  END
  SET @value = RIGHT(@value, len(@value) - 1)
  IF @value <> ''
  BEGIN
   IF @status = 'S' AND ascii(substring(@value, 1, 1)) BETWEEN ascii('0') AND ascii('9') SET @rtn = @rtn + ','
   IF @status = 'N' AND NOT ascii(substring(@value, 1, 1)) BETWEEN ascii('0') AND ascii('9') SET @tmp = @tmp + ','
  END
 END
 IF RIGHT(@rtn, 1) = ',' SET @rtn = LEFT(@rtn, len(@rtn) - 1)
 SET @rtn = @rtn + '|' + @tmp
 RETURN @rtn
END
go

--测试
--SELECT dbo.uf_get_value('A123,B23,BD21')

ttpsan520
2013-06-05 · TA获得超过404个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:313万
展开全部
USE tempdb 
GO
ALTER FUNCTION DBO.SPLT 
(@COL NVARCHAR(200),
@PRA NVARCHAR(10)
)
RETURNS NVARCHAR(100)
AS

BEGIN
DECLARE @NUM NVARCHAR(100),@STR NVARCHAR(100),@I INT 
SET @NUM=''
SET @STR=''
SET @I=1

WHILE(@I<=LEN(ISNULL(@COL,'')))
BEGIN
IF  SUBSTRING(@COL,@I,1)IN('0','1','2','3','4','5','6','7','8','9') --说明是数字
SET @NUM=@NUM+SUBSTRING(@COL,@I,1)
ELSE
SET @STR=@STR+SUBSTRING(@COL,@I,1)
SET @I=@I+1

END
IF @PRA='STR'
SET @NUM=@STR
RETURN @NUM
END
GO
SELECT dbo.SPLT('A123,B23,BD21','STR'),dbo.SPLT('A123,B23,BD21','')

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
代号极光
2013-06-05 · TA获得超过104个赞
知道答主
回答量:65
采纳率:0%
帮助的人:49.1万
展开全部
用substring()函数 分割字符串 或者 like 正则匹配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友946518c
2013-06-05 · 超过13用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:24.1万
展开全部
用excel做一个表结构,然后把想等到的结果放上来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式