iT邦幫忙

1

SQL取代語法請教

請問我有一段文字

(XXXXXABC)

我想把前後的括號拿掉,且不能有空白,請問SQL語法要如何做呢??

2
w4560000
iT邦新手 4 級 ‧ 2020-02-25 09:25:37

單純是括號的話,Replace兩次 雖然說有點醜/images/emoticon/emoticon06.gif

select REPLACE (REPLACE (a4, '(', ''), ')', '') from a

https://ithelp.ithome.com.tw/upload/images/20200225/20110125skOgVcrLI5.png

2
Zed_Yang
iT邦新手 3 級 ‧ 2020-02-25 09:50:13

SUBSTRING(欄位名稱,2,LEN(欄位長度)-2)
去頭去尾的概念

DECLARE @Str NVARCHAR(10) = '(12345678)'
SELECT SUBSTRING(@Str,2,LEN(@Str)-2)
untitled iT邦新手 5 級 ‧ 2020-02-26 10:38:59 檢舉

我比較建議用replace,確保他中間的資料有可能有'(',')'

Zed_Yang iT邦新手 3 級 ‧ 2020-02-26 10:44:09 檢舉

是擔心他的輸入資料長這樣嗎
(X(X)XX(X)AB(C)

那就主要看遇到的狀況囉
能解決都是好方法

2
浩瀚星空
iT邦超人 1 級 ‧ 2020-02-25 10:04:47

用正則吧

SELECT REGEXP_REPLACE(itemname,'[()]','') FROM `test`

想拿掉幾個就幾個

ps:我沒注意到是mssql。這是mysql的。就當參考吧。

ckp6250 iT邦研究生 3 級 ‧ 2020-02-26 06:01:23 檢舉

REGEXP_REPLACE

這個最優美,但學習要一點成本,我到現在還沒完全掌握正則。

3
一級屠豬士
iT邦大師 1 級 ‧ 2020-02-25 10:11:33

使用 replace 兩次,或是掐頭去尾,都是經典的方式.
另外有 translate() 函數, 看發問者標籤,可以看以下
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/translate-transact-sql?view=sql-server-ver15

我用 Postgresql 也是有一樣的函數, 技巧就在 第三組參數,不放空白字串
, 就不是替換成空白了. 與 w4560000 回答的replace() 也是一樣的方式.

select translate('(XXXXXABC)', '()', '')
     , translate('(XXXXXABC)', '()', '  ') as "使用雙空白"
     , translate('(XXXXXABC)', '()', '<>') as "使用<>";
+-----------+------------+------------+
| translate | 使用雙空白   |   使用<>   |
+-----------+------------+------------+
| XXXXXABC  |  XXXXXABC  | <XXXXXABC> |
+-----------+------------+------------+
(1 row)
看更多先前的回應...收起先前的回應...

mssql有正則對應的用法嘛??
其實這種取代式的。我還很喜歡用正則

mssql有正則對應的用法嘛?? 這個問題,要看什麼角度來看.
不過我是不用這種database的.因為時間不夠,沒辦法掌握太多種,
就不使用了.

froce iT邦大師 1 級 ‧ 2020-02-25 12:03:05 檢舉

mssql好像沒有。

SQL Server 現在可以使用Python,所以可以加工一下,就可以用了.
所以我才說要看什麼角度來看.

我要發表回答

立即登入回答