我有一個NTEXT列SQL Server數據庫中的表。此列可能包含用雙引號括起來的數據。當我查詢這一列時,我想刪除這些前導和尾隨引號。如何刪除SQL Server中的前導和尾隨引號?
例如:
「這是一封測試郵件」
應該成爲
這是一封測試郵件
我知道的LTRIM和RTRIM函數,但這些工作只適用於空間。任何關於我可以用來實現這個功能的建議。
我有一個NTEXT列SQL Server數據庫中的表。此列可能包含用雙引號括起來的數據。當我查詢這一列時,我想刪除這些前導和尾隨引號。如何刪除SQL Server中的前導和尾隨引號?
例如:
「這是一封測試郵件」
應該成爲
這是一封測試郵件
我知道的LTRIM和RTRIM函數,但這些工作只適用於空間。任何關於我可以用來實現這個功能的建議。
,你可以用一個空字符串替換引號...
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
在字符串內可能有引號,我不想刪除這些 - 只是引導和尾隨引號。 – adeel825 2009-06-30 21:24:19
更新了一個case語句的例子,當兩者都存在時刪除前導和尾隨。 – 2009-06-30 21:29:47
我剛剛測試此代碼在MS SQL 2008和驗證它。
刪除最左邊的報價:
UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 2, LEN(FieldName))
WHERE LEFT(FieldName, 1) = '"'
刪除最右邊的報價:(修訂避免隱式類型轉換誤差爲int)
UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 1, LEN(FieldName)-1)
WHERE RIGHT(FieldName, 1) = '"'
你可以試試這個 -
SELECT left(right(cast(SampleText as nVarchar),LEN(cast(sampleText as nVarchar))-1),LEN(cast(sampleText as nVarchar))-2)
FROM TableName
歡呼聲
我認爲這是一個簡單的腳本,如果你想刪除所有報價
UPDATE Table_Name
SET col_name = REPLACE(col_name, '"', '')
我知道這是一個老問題的帖子,但我的女兒來到了我的問題,並引用此頁面有可能的答案。鑑於她正在爲此尋找答案,這是一個安全的假設,其他人可能仍然如此。
所有這些都是非常好的方法,並且所有的東西都有很多方式可以讓貓變得像皮膚一樣。
如果你正在尋找一個左修剪和一個字符或字符串的正確修剪,和您的尾隨字符/字符串長度一致,這是我的建議:
SELECT SUBSTRING(ColName,VAR, LEN(ColName)-VAR)
或者在這個問題上...
SELECT SUBSTRING('"this is a test message"',2, LEN('"this is a test message"')-2)
有了這個,你只需調整SUBSTRING起點(2),和LEN位置(-2),以你需要從字符串中刪除任何值。
這是非迭代的,不需要明確的案例測試,最重要的是它是內聯所有這些都是一個更清晰的執行計劃。
CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX), @Char varchar(5))
RETURNS VARCHAR(MAX)
BEGIN
RETURN SUBSTRING(@String,PATINDEX('%[^' + @Char + ' ]%',@String)
,(DATALENGTH(@String)+2 - (PATINDEX('%[^' + @Char + ' ]%'
,REVERSE(@String)) + PATINDEX('%[^' + @Char + ' ]%',@String)
)))
END
GO
Select dbo.TRIM('"this is a test message"','"')
您可以簡單地使用SQL Server中的 「替換」 功能。
這樣的:
select REPLACE('this is a test message','"','')
注:第二個參數這裏是「雙引號」兩個單引號內,第三個參數是簡單的兩個單引號的組合。這裏的想法是用空白替換雙引號。
非常簡單和易於執行!
如果調用表[Messages]並且該列名爲[Description],那麼以下腳本僅從列值左右移除引號。
-- If the content is in the form of "anything" (LIKE '"%"')
-- Then take the whole text without the first and last characters
-- (from the 2nd character and the LEN([Description]) - 2th character)
UPDATE [Messages]
SET [Description] = SUBSTRING([Description], 2, LEN([Description]) - 2)
WHERE [Description] LIKE '"%"'
我的解決辦法是使用差在所述列中的值的長度進行比較的相同列的長度,但是與用空格置換和修整,以便計算的開始和長度值作爲一個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
將會產生以下結果:
before after
-----------------
test test
"
"test test
test" test
"test" test
""test test
test"" test
""test"" test
"te"st" te"st
te"st te"st
有一點要注意的是越來越長的時候,我只需要使用LTRIM,而不是LTRIM和RTRIM相結合,這是因爲LEN函數不計算尾隨空格。
我用這個:
UPDATE DataImport
SET PRIO =
CASE WHEN LEN(PRIO) < 2
THEN
(CASE PRIO WHEN '""' THEN '' ELSE PRIO END)
ELSE REPLACE(PRIO, '"' + SUBSTRING(PRIO, 2, LEN(PRIO) - 2) + '"',
SUBSTRING(PRIO, 2, LEN(PRIO) - 2))
END
要刪除這兩個報價,你可以做到這一點
SUBSTRING(fieldName, 2, lEN(fieldName) - 2)
您可以分配或項目所產生的價值
您可以使用哪些工作下面的查詢對我來說 -
For updating-
UPDATE table SET colName= REPLACE(LTRIM(RTRIM(REPLACE(colName, '"', ''))), '', '"') WHERE...
對於selecting-
SELECT REPLACE(LTRIM(RTRIM(REPLACE(colName, '"', ''))), '', '"') FROM TableName
一些UDF的重新可用性。
左修剪由字符(任何數字)
CREATE FUNCTION [dbo].[LTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN
RETURN REPLACE(REPLACE(LTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END
由字符右邊修剪(任何數字)
CREATE FUNCTION [dbo].[RTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN
RETURN REPLACE(REPLACE(RTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END
注意啞字符 '|'(ALT + 0166)不能出現在數據(您可能希望測試您的輸入字符串,首先,如果不確定或使用不同的字符)。
您使用的是哪個版本的SQL Server? – 2009-06-30 21:31:41
SQL Server 2005 – adeel825 2009-06-30 23:42:36