我有一张这样的表
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`
答案 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