~~~~~~~~~~~高分,字符串截取问题。求教~~~~~~!!!!!

wendi 2006-10-26 11:51:26
假设现在一个表中有三个字段,表结构如下:

A | B C D
0/5/9 |
01/15/12 |

我如何通过一个统一的语句将字段A中的数据的第一个数字截取出来放到B中,第二个数字放到C中,第三个数字放到D中。

谢谢!!
...全文
254 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2006-10-26
  • 打赏
  • 举报
回复
SELECT
a=PARSENAME(REPLACE(a, '/', '.'), 3),
b=PARSENAME(REPLACE(a, '/', '.'), 2),
c=PARSENAME(REPLACE(a, '/', '.'), 1)
FROM(
SELECT a = '0/1/2'
)A

-- 结果:
a b c
0 1 2
老本 2006-10-26
  • 打赏
  • 举报
回复
如果需要,进行ISNULL处理。
老本 2006-10-26
  • 打赏
  • 举报
回复
最好的办法是采用SQL Server 的计算列,但是非常不幸,这样不行。
其次就是采用视图。

DROP TABLE TA
GO

CREATE TABLE TA(A VARCHAR(50))
GO

DROP VIEW VA
GO

CREATE VIEW VA AS
select A,
left(A,charindex('/',A)-1) AS B,
Left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1) AS C,
Reverse(left(reverse(A),charindex('/',reverse(A))-1)) AS D
FROM TABLE1
GO

INSERT INTO TA VALUES('0/5/9')
INSERT INTO TA VALUES('01/15/12')
GO

SELECT * FROM VA
BFDLRG 2006-10-26
  • 打赏
  • 举报
回复
如果A字段为日期型
update a set b=DAY(aa.a),c=MONTH(aa.a),d=YEAR(aa.a) from a, (select a from a) as aa where aa.a=a.a
九斤半 2006-10-26
  • 打赏
  • 举报
回复
CREATE TABLE TEST(A NVARCHAR(40),B NVARCHAR(40),C NVARCHAR(40),D NVARCHAR(40))

INSERT TEST SELECT '0/5/9',NULL,NULL,NULL
INSERT TEST SELECT '01/15/12',NULL,NULL,NULL
SELECT * FROM TEST

UPDATE TEST SET
B=LEFT(A,CHARINDEX('/',A)-1),
C=SUBSTRING(A,CHARINDEX('/',A)+1,CHARINDEX('/',A,CHARINDEX('/',A))-1),
D=RIGHT(A,CHARINDEX('/',REVERSE(A))-1)

SELECT * FROM TEST

DROP TABLE TEST
子陌红尘 2006-10-26
  • 打赏
  • 举报
回复
如果字符串中不包含".",可以用一个变通的办法:

declare @t table(A varchar(20),B varchar(10),C varchar(10),D varchar(10))
insert into @t(A) select '0/5/9'
insert into @t(A) select '01/15/12'

update @t
set
B=PARSENAME(replace(A,'/','.'),3),
C=PARSENAME(replace(A,'/','.'),2),
D=PARSENAME(replace(A,'/','.'),1)


select * from @t
/*
A B C D
-------------------- ---------- ---------- ----------
0/5/9 0 5 9
01/15/12 01 15 12

*/
子陌红尘 2006-10-26
  • 打赏
  • 举报
回复
declare @t table(A varchar(20),B varchar(10),C varchar(10),D varchar(10))
insert into @t(A) select '0/5/9'
insert into @t(A) select '01/15/12'

update @t
set
B=left(A,charindex('/',A)-1),
C=left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1),
D=reverse(left(reverse(A),charindex('/',reverse(A))-1))


select * from @t
/*
A B C D
-------------------- ---------- ---------- ----------
0/5/9 0 5 9
01/15/12 01 15 12

*/
dawugui 2006-10-26
  • 打赏
  • 举报
回复
CREATE TABLE A(id INT,country VARCHAR(100))
INSERT A
SELECT 1,'中国;日本;韩国' UNION ALL
SELECT 2,'美国;意大利;法国' UNION ALL
SELECT 3,'德国'
SELECT * FROM A

-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b


SELECT
A.ID,
COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID)
FROM A, # B
WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';'
ORDER BY 1,2
GO


DROP TABLE A,#
九斤半 2006-10-26
  • 打赏
  • 举报
回复
查找/

CHARINDEX
white_porpoise 2006-10-26
  • 打赏
  • 举报
回复
PARSENAME(REPLACE(a, '/', '.'), 3)
确实强,学习了
marco08 2006-10-26
  • 打赏
  • 举报
回复
老大就是老大, 與眾不同
abc_sk 2006-10-26
  • 打赏
  • 举报
回复
..

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧