如何在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)