删除sql server中的特殊格式数值

时间:2016-01-06 07:49:20

标签: sql sql-server

记录看起来像这样

当前价值
  - 1.主席
  - 2.表
  - 8端口开关
  - 3.电缆
....

期望值

  • 8端口切换

  • 电缆 .....

我试过了表达式

SUBSTRING([Column], PATINDEX('%[A-Z]%', [Column]), LEN([Column]))

并且可以正常删除记录开头的数值,但我希望它跳过 8端口切换记录中的数字。

由于

4 个答案:

答案 0 :(得分:1)

以下表达对我有用....

Replace([Column],LEFT([Column],Charindex('.',[Column],-1)),'')

由于

答案 1 :(得分:0)

一个选项就是获取实际以数字开头的那些行:

select ... where column like '[0-9]. %'

这当然只适用于单位数字,但你可能不得不制作更复杂的逻辑来处理2位数字。

答案 2 :(得分:0)

试试这个。我还删除了前两个字符(" - ")。

DECLARE @test_table TABLE (value NVARCHAR(MAX))

INSERT INTO @test_table
SELECT '- 1. Chair'
UNION ALL
SELECT '- 2. Table'
UNION ALL
SELECT '- 8 Port Switch'
UNION ALL
SELECT '- 3. Cable'
UNION ALL
SELECT '- 14. Router'

SELECT SUBSTRING(value, PATINDEX('%[0-9].%', value) + 2, LEN(value))
FROM @test_table

答案 3 :(得分:0)

试试这个:

SELECT
    REGEXP_REPLACE(MY_TEXT, '^-\s*[0-9]+\s*\.*\s*') AS MY_TEXT
FROM
(
    SELECT '- 1. Chair'      AS MY_TEXT FROM DUAL UNION
    SELECT '- 2. Table'      AS MY_TEXT FROM DUAL UNION
    SELECT '- 8 Port Switch' AS MY_TEXT FROM DUAL UNION
    SELECT '- 3. Cable'      AS MY_TEXT FROM DUAL
)
WHERE REGEXP_REPLACE(MY_TEXT, '^-\s*[0-9]+\s*\.*\s*') != 'Port Switch'

输出结果为:

  

主席

     

     

电缆