SQL Server:如何从字符串中删除前导/尾随非字母数字字符?

Posted

技术标签:

【中文标题】SQL Server:如何从字符串中删除前导/尾随非字母数字字符?【英文标题】:SQL Server : how to remove leading/trailing non-alphanumeric characters from string? 【发布时间】:2019-02-06 17:14:38 【问题描述】:

我正在使用 SQL Server 2008,并尝试清理 url 列表。

一些现有的文本示例:

www.google.com
'www.google.com'
/www.google.com
www.google.com/

理想情况下,我可以去掉任何前导/尾随非字母数字字符,这样四个字符就会给出与

相同的输出
www.google.com

【问题讨论】:

T-SQL trim &nbsp (and other non-alphanumeric characters) 可能重复? 只有一个非字母数字值,还是有多个? 【参考方案1】:

好吧,如果你知道它们只是在开头和结尾,你可以这样做:

with t as (
      select *
      from (values ('www.google.com'), ('''www.google.com'''), ('/www.google.com')) v(text)
     )
select t.text, v2.text2
from t cross apply
     (values (stuff(t.text, 1, patindex('%[a-zA-Z0-9]%', t.text) - 1, ''))
     ) v(text1) cross apply
     (values (case when v.text1 like '%[^a-zA-Z0-9]'
                   then stuff(v.text1, len(text) + 1 - patindex('%[a-zA-Z0-9]%', reverse(v.text1)), len(v.text1), '')
                   else v.text1
              end)
     ) v2(text2);

Here 是一个 dbfiddle。

【讨论】:

我认为 patindex 上缺少括号(最后一行旁边)。 db fiddle with fix, though results aren't what I'd expect @scsimon 。 . .在我测试它们之前,我总是在 SQL Server 中弄错这些东西。答案现在有效。 我的紫外线因为它可能足以满足他们的需求。它不适用于某些情况,分号、冒号、大括号、奇怪的东西。 @scsimon 。 . .这将删除代码中字符类中所有未提及的字符。因此,它会删除前导或尾随分号、冒号、尾大括号以及任何其他不是 a-z、A-Z 或 0-9 的内容。【参考方案2】:

为什么不直接使用replace() ?:

SELECT REPLACE(REPLACE(col, '''', ''), '/', '')

【讨论】:

你需要考虑所有非字母数字,不是吗?【参考方案3】:

您应该能够使用子字符串。计算长度可能很棘手:

DECLARE @temp TABLE (val varchar(100))
INSERT INTO @temp VALUES
 ('www.google.com'),('''www.google.com'''),('/www.google.com'),('www.google.com/'),('[www.google.com];')

SELECT SUBSTRING(val
                ,PATINDEX('%[a-zA-Z0-9]%', val) --start at position
                ,LEN(val) + 2 - PATINDEX('%[a-zA-Z0-9]%', val) 
                  - PATINDEX('%[a-zA-Z0-9]%', REVERSE(val)) --length of substring
                ) AS [Result]
  FROM @temp

产生输出:

Result
--------------
www.google.com
www.google.com
www.google.com
www.google.com
www.google.com

【讨论】:

以上是关于SQL Server:如何从字符串中删除前导/尾随非字母数字字符?的主要内容,如果未能解决你的问题,请参考以下文章

从字符串值中删除空格(前导和尾随)

如何删除前导和尾随的空格以及字符串中的多个空格? [复制]

SQL Server从字符串中删除尾随空格

如何删除字符串中的前导零和尾随零? Python

如何在Java中仅删除字符串的尾随空格并保留前导空格?

从 SQL Server 中的十进制中删除尾随零