【问题标题】:How to split the string in one column into two columns如何将一列中的字符串拆分为两列
【发布时间】:2014-08-20 09:58:19
【问题描述】:

我有一张这样的桌子

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 做到这一点。?我已经在 MYSQL 中使用 SUBSTRING_INDEX 函数完成了

MySql 查询

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

【问题讨论】:

  • ind.kol.katta 这样的值会发生什么? “我已经在MYSQL中做了”然后显示出来。
  • SQL-SERVER 或 MYSQL。不能两者兼得。
  • 因为我没有使用MSSQL,你可能会从这个资源msdn.microsoft.com/en-IN/library/ms181984.aspx和substring得到答案
  • 如果它是 sql server 并且在这种情况下只有 1 个点,你可以像这样使用PARSENAME 函数:PARSENAME(value,2) as country, PARSENAME(value,1) as place ...

标签: mysql sql sql-server


【解决方案1】:

尝试以下查询:-

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

这可能对你有帮助。

【讨论】:

    【解决方案2】:

    希望以下查询对您有所帮助。

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

    【讨论】:

      【解决方案3】:

      试试这个:

      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)。

      【讨论】:

        【解决方案4】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 2020-01-19
          • 1970-01-01
          • 2013-01-22
          相关资源
          最近更新 更多