从sql中的名称中删除多个句点

时间:2013-06-11 21:49:20

标签: sql sql-server sql-server-2008

我有一个表(Person),其列上传包含上传文档,其中包含.docx,.doc等扩展名。但是有些用户输入了test.test.doc,test.test.test等文档.docx,表示同名的多个句点。我想将多个句点替换为_(test_test.doc,test_test_test.docx)。是否可以通过SQL?任何帮助表示赞赏!!!

3 个答案:

答案 0 :(得分:4)

这是一种(相当复杂)的方法:

DECLARE @DataTable TABLE(Data VARCHAR(100))

INSERT INTO @DataTable 
VALUES  ('test.test.doc'),
        ('test.test.test.docx')

SELECT  REPLACE(LEFT(Data,LEN(Data)-CHARINDEX('.',REVERSE(Data),0)),'.','_')+
        RIGHT(Data,CHARINDEX('.',REVERSE(Data),0)) Col1
FROM @DataTable

结果如下:

╔═════════════════════╗
║        Col1         ║
╠═════════════════════╣
║ test_test.doc       ║
║ test_test_test.docx ║
╚═════════════════════╝

here is a sqlfiddle及其现场演示。

答案 1 :(得分:0)

我认为这会更短,但事实证明它的长度差不多。尽管如此,这是另一种方式:

IsNull(Stuff(
   Replace(DocName, '.', '_'),
   Len(DocName) - CharIndex('.', Reverse(DocName)) + 1,
   1,
   '.'
), DocName)

答案 2 :(得分:0)

试试这个 -

DECLARE @DataTable TABLE (txt VARCHAR(100))
INSERT INTO @DataTable (txt)
VALUES ('test.test.doc'), ('test.test.test.docx')

SELECT 
      REVERSE(REPLACE(SUBSTRING(txt, CHARINDEX('.', txt, 1) + 1, LEN(txt)), '.', '_')) 
    + REVERSE(LEFT(txt, CHARINDEX('.', txt, 0)))
FROM (
    SELECT txt = REVERSE(txt)
    FROM @DataTable
) t