我有一个表(人),其中有一列 uploads 包含上传的文档,扩展名为 .docx、.doc 等。但是有些用户输入了 test.test.doc、test.test.test.docx 等文档,表示同名的多个句点。我想将多个句点替换为 _(test_test.doc,test_test_test.docx)。可以通过 SQL 实现吗?任何帮助表示赞赏!
问问题
239 次
3 回答
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 ║
╚═════════════════════╝
这是一个带有现场演示的sqlfiddle 。
于 2013-06-11T21:58:36.520 回答
0
我以为这会更短,但结果却是差不多一样长。尽管如此,这里还有另一种方式:
IsNull(Stuff(
Replace(DocName, '.', '_'),
Len(DocName) - CharIndex('.', Reverse(DocName)) + 1,
1,
'.'
), DocName)
于 2013-06-11T22:15:00.850 回答
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
于 2013-06-12T06:14:58.410 回答