我在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)
您可以简单地使用 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) 调整为您需要从字符串中删除的任何值。
它是非迭代的,不需要明确的案例测试,最重要的是它是内联的,所有这些都有助于制定更清晰的执行计划。
我的解决方案是使用列值长度的差异与相同的列长度进行比较,但将双引号替换为空格并进行修剪,以便计算作为 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 函数不计算尾随空格。
您可以用空字符串替换引号...
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)
归档时间: |
|
查看次数: |
88463 次 |
最近记录: |