日期:2014-05-18  浏览次数:20686 次

如何在SQL中分割字符串
我现在需要从一个表里读取数据,其中有个字段的值是这样的“一级名称_二级名称_三级名称”。
我现在只需要把这个字段的一级名称读取出来。然后按照一级名称排序。
譬如这个字段为a 则
如:Select f1,f2,f3,a from table order by a

得到如下结果
1,1,1,一级名称
2,22,2,一级名称
3,2,11,一级名称
12,31,41,一级名称
11,12,71,一级名称

结果是按照“一级名称”来排序的。
可以在一个SQL语句中实现这个吗?怎么弄

------解决方案--------------------
可是要这个东西?

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,#

id country
----------- ----------------
1 中国;日本;韩国
2 美国;意大利;法国
3 德国

(所影响的行数为 3 行)

ID COUNTRY
----------- ---------
1 韩国
1 日本
1 中国
2 法国
2 美国
2 意大利
3 德国

(所影响的行数为 7 行)



------解决方案--------------------
--好像没有必要.这样即可.

Select f1,f2,f3,a='一级名称' from table where charindex('一级名称',a) > 0 order by a
------解决方案--------------------
SQL code


--上面的SQL语句被CSDN自动加空格了,用如下:

select f1,f2,f3,left(A,charindex('_',A)-1)
from 表名 
order by left(A,charindex('_',A)-1)