我想从字符串中删除部分字符串

时间:2017-03-28 06:05:11

标签: sql tsql

提前谢谢。

我想在之后删除字符串,包括,但长度是可变的,字符串可以是任意长度。

1)实施例:
 输入: - SCC0204.X and FRK0005.X and RF0023.X and ADF1010.A and HGT9010.V

输出:SCC0204 and FRK0005 and RF0023 and ADF1010.A and HGT9010.V

我尝试使用charindex,但随着长度的不断变化,我无法做到这一点。我想修剪值只用X

结束

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:2)

假设只有一个点

UPDATE TABLE 
SET column_name = left(column_name, charindex('.', column_name) - 1)

对于SELECT

select left(column_name, charindex('.', column_name) - 1) AS col
from your_table

答案 1 :(得分:1)

使用LEFT字符串函数:

 DECLARE @String VARCHAR(100) = 'SCC0204.XXXXX'
 SELECT LEFT(@String,CHARINDEX('.', @String) - 1)

答案 2 :(得分:1)

我认为你最好的选择是创建一个解析字符串并使用正则表达式的函数。我希望这篇旧帖有所帮助:

Perform regex (replace) in an SQL query

但是,如果您需要修剪的值始终是“.X”,那么您应该使用     选择替换(字符串,'。x','')

答案 3 :(得分:1)

请检查以下代码。我想这会对你有帮助。

DECLARE @String VARCHAR(100) = 'SCC0204.X'
IF (SELECT RIGHT(@String,2)) ='.X'
   SELECT LEFT(@String,CHARINDEX('.', @String) - 1)
ELSE 
  SELECT @String

答案 4 :(得分:1)

希望这会有所帮助。当值具有小数时,代码仅修剪字符串"。"在其中,如果该值等于.X

;WITH cte_TestData(Code) AS
(
SELECT 'SCC0204.X' UNION ALL
SELECT 'FRK0005.X' UNION ALL
SELECT 'RF0023.X' UNION ALL
SELECT 'ADF1010.A' UNION ALL
SELECT 'HGT9010.V' UNION ALL
SELECT 'SCC0204' UNION ALL
SELECT 'FRK0005'
)
SELECT CASE 
        WHEN CHARINDEX('.', Code) > 0 AND RIGHT(Code,2) = '.X'
            THEN SUBSTRING(Code, 1, CHARINDEX('.', Code) - 1)
        ELSE Code
        END
FROM cte_TestData

如果标准仅用于替换删除.X,则可能这也应该起作用

;WITH cte_TestData(Code) AS
(
SELECT 'SCC0204.X' UNION ALL
SELECT 'FRK0005.X' UNION ALL
SELECT 'RF0023.X' UNION ALL
SELECT 'ADF1010.A' UNION ALL
SELECT 'HGT9010.V' UNION ALL
SELECT 'SCC0204' UNION ALL
SELECT 'FRK0005'
)
SELECT REPLACE (Code,'.X','')
FROM cte_TestData

答案 5 :(得分:1)

更新:我刚刚错过了OP澄清要求的其中一条评论。我在下面列出的是如何处理在以X结尾的字符串上的第一个点之后删除所有内容的要求。我将此留在此处以供参考。

;WITH cte_TestData(Code) AS
(
  SELECT 'SCC0204.X'  UNION ALL -- ends with '.X'
  SELECT 'FRK.000.X'  UNION ALL -- ends with '.X', contains multiple dots
  SELECT 'RF0023.AX'  UNION ALL -- ends with '.AX'
  SELECT 'ADF1010.A'  UNION ALL -- ends with '.A'
  SELECT 'HGT9010.V'  UNION ALL -- ends with '.V'
  SELECT 'SCC0204.XF' UNION ALL -- ends with '.XF'
  SELECT 'FRK0005'    UNION ALL -- totally clean
  SELECT 'ABCX'                 -- ends with 'X', not dots
)
SELECT 
  orig_string = code,
  newstring   = 
  SUBSTRING
  (
    code, 1,
    CASE 
      WHEN code LIKE '%X'
      THEN ISNULL(NULLIF(CHARINDEX('.',code)-1, -1), LEN(code))
      ELSE LEN(code)
    END
  )
FROM cte_TestData;

仅供参考 - SQL Server 2012+您可以像这样简化此代码:

SELECT 
  orig_string = code,
  newstring   = 
  SUBSTRING(code, 1,IIF(code LIKE '%X', ISNULL(NULLIF(CHARINDEX('.',code)-1, -1), LEN(code)), LEN(code)))
FROM cte_TestData;

答案 6 :(得分:0)

使用SUBSTRING,您可以通过以下代码达到您的要求。

SELECT SUBSTRING(column_name, 0, CHARINDEX('.', column_name)) AS col
FROM your_table

如果你想从字符串中删除固定的 .X ,你也可以使用REPLACE函数。

SELECT REPLACE(column_name, '.X', '') AS col