如何删除SQL Server中的前导和尾随引号?

ade*_*825 33 sql sql-server

我在SQL Server数据库中有一个带有NTEXT列的表.此列可能包含用双引号括起来的数据.当我查询此列时,我想删除这些前导和尾随引号.

例如:

"这是一条测试信息"

应该成为

这是一条测试信息

我知道LTRIM和RTRIM函数,但这些函数仅用于空间.有关我可以使用哪些功能来实现此目的的任何建议.

Wow*_*taH 59

我刚刚在MS SQL 2008中测试了这段代码并对其进行了验证.

删除最左边的引用:

UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 2, LEN(FieldName))
WHERE LEFT(FieldName, 1) = '"'
Run Code Online (Sandbox Code Playgroud)

删除最右边的引用:(修改以避免从隐式类型转换到int的错误)

UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 1, LEN(FieldName)-1)
WHERE RIGHT(FieldName, 1) = '"'
Run Code Online (Sandbox Code Playgroud)


Mar*_*ady 29

如果你想删除所有引号,我认为这是一个更简单的脚本

UPDATE Table_Name
SET col_name = REPLACE(col_name, '"', '')
Run Code Online (Sandbox Code Playgroud)

  • 他只要求删除引号和尾随引号,此解决方案替换所有引号...... (13认同)

Dea*_*man 6

您可以简单地使用 SQL Server 中的“替换”功能。

像这样 ::

select REPLACE('this is a test message','"','')
Run Code Online (Sandbox Code Playgroud)

注意:这里的第二个参数是两个单引号内的“双引号”,第三个参数只是两个单引号的组合。这里的想法是将双引号替换为空格。

非常简单且易于执行!


小智 5

我知道这是一个较旧的问题帖子,但我女儿带着问题来找我,并引用此页面作为可能的答案。鉴于她正在为此寻找答案,这是一个安全的假设,其他人可能仍然如此。

所有都是很好的方法,就像所有的东西一样,给猫剥皮的方法和有猫去皮的方法一样多。

如果您正在寻找字符或字符串的左修剪右修剪,并且您的尾随字符/字符串的长度是统一的,那么我的建议是:

SELECT SUBSTRING(ColName,VAR, LEN(ColName)-VAR)
Run Code Online (Sandbox Code Playgroud)

或者在这个问题...

SELECT SUBSTRING('"this is a test message"',2, LEN('"this is a test message"')-2)
Run Code Online (Sandbox Code Playgroud)

有了这个,您只需将 SUBSTRING 起点 (2) 和 LEN 位置 (-2) 调整为您需要从字符串中删除的任何值。

它是非迭代的,不需要明确的案例测试,最重要的是它是内联的,所有这些都有助于制定更清晰的执行计划。


Dav*_*ton 5

我的解决方案是使用列值长度的差异与相同的列长度进行比较,但将双引号替换为空格并进行修剪,以便计算作为 SUBSTRING 函数中的参数的起始值和长度值。

这样做的好处是您可以删除任何前导或尾随字符,即使它出现多次,同时保留文本中包含的任何字符。

这是我的一些测试数据的答案:

 SELECT 
  x AS before
  ,SUBSTRING(x 
       ,LEN(x) - (LEN(LTRIM(REPLACE(x, '"', ' ')) + '|') - 1) + 1 --start_pos
       ,LEN(LTRIM(REPLACE(x, '"', ' '))) --length
       ) AS after
FROM 
(
SELECT 'test'     AS x UNION ALL
SELECT '"'        AS x UNION ALL
SELECT '"test'    AS x UNION ALL
SELECT 'test"'    AS x UNION ALL
SELECT '"test"'   AS x UNION ALL
SELECT '""test'   AS x UNION ALL
SELECT 'test""'   AS x UNION ALL
SELECT '""test""' AS x UNION ALL
SELECT '"te"st"'  AS x UNION ALL
SELECT 'te"st'    AS x
) a
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果:

before  after
-----------------
test    test
"   
"test   test
test"   test
"test"  test
""test  test
test""  test
""test""    test
"te"st" te"st
te"st   te"st
Run Code Online (Sandbox Code Playgroud)

需要注意的一件事是,在获取长度时我只需要使用 LTRIM 而不是 LTRIM 和 RTRIM 组合,这是因为 LEN 函数不计算尾随空格。


Sco*_*vey 2

您可以用空字符串替换引号...

SELECT AllRemoved = REPLACE(CAST(MyColumn AS varchar(max)), '"', ''),
       LeadingAndTrailingRemoved = CASE 
           WHEN MyTest like '"%"' THEN SUBSTRING(Mytest, 2, LEN(CAST(MyTest AS nvarchar(max)))-2)
           ELSE MyTest
           END  
FROM   MyTable
Run Code Online (Sandbox Code Playgroud)