如何将一列中的字符串拆分为两列

时间:2014-08-20 09:58:19

标签: mysql sql sql-server

我有一张这样的表

id          value
-------     ---------------
1           ind.kolkatta
2           ind.pune
3           ind.mumbai
4           pak.lahore
5           pak.karachi
6           uae.sharjah

我想返回下表:

id          contry       place
-------     ---------    ----------
1           ind          kolkatta
2           ind          pune
3           ind          mumbai
4           pak          lahore
5           pak          karachi
6           uae          sharjah

我怎么能用MSSQL做到这一点。我已经使用SUBSTRING_INDEX函数在MYSQL中完成了

我的MySql查询

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(`value`, '.', 1), '.', -1) as contry,
       SUBSTRING_INDEX(SUBSTRING_INDEX(`value`, '.', 2), '.', -1) as place 
FROM   `table`

4 个答案:

答案 0 :(得分:1)

尝试以下查询: -

SELECT ID, SUBSTRING(value, 1, CHARINDEX('.', value)-1) AS contry,
SUBSTRING(value, CHARINDEX(',', value)+1, LEN(value)) AS  place
FROM YOUR_TABLE;

这可能对您有所帮助。

答案 1 :(得分:0)

希望以下查询可以帮助您。

SELECT  id, SUBSTRING(value,1,3) as Country,SUBSTRING(value,4,LEN(value))AS Place FROM TableName

答案 2 :(得分:0)

试试这个:

SELECT  Id,
        LEFT(Value, CHARINDEX('.', Value)-1) AS Country, 
        STUFF(Value, 1, CHARINDEX('.', Value), '') AS Place
FROM    Table

根据King King评论我检查了以下内容

SELECT  Id,
        PARSENAME(value, 2) AS Country, 
        PARSENAME(Value, 1) AS Place
FROM    Table

上述方法有效,但我不确定支持的版本(我使用的是SSMS 2012)。

答案 3 :(得分:0)

或者只是循环,它会解析你的名字中有多少个句号。

DECLARE @FILE VARCHAR(55) = 'ind.kol.katta.test1.test2.test3.test4'
DECLARE @FILEFUN AS VARCHAR(55) = LEFT(@FILE,CHARINDEX('.',@FILE))
DECLARE @FILENAMEOUTPUT AS TABLE(Name Varchar(55))

WHILE LEN(@FILE) > 0
BEGIN
INSERT INTO @FILENAMEOUTPUT
SELECT REPLACE(@FILEFUN,'.','')
SET @FILE = REPLACE(@FILE,@FILEFUN,'')
SET @FILEFUN = iif(CHARINDEX('.',@FILE)=0,@FILE,LEFT(@FILE,CHARINDEX('.',@FILE)))
END

SELECT * FROM @FILENAMEOUTPUT