我有一些關於sql select語句的問題。 我有這個樣子SQL SERVER從某個字符後選擇字符串
2>4>5 or
28>30>52 or
300>410>500 or
2>4>5>8
我的問題是列值,我怎麼能得到RIGHT的> 字符後的值,所以從價值選擇上述聲明將返回
4
30
410
5
在此先感謝
我有一些關於sql select語句的問題。 我有這個樣子SQL SERVER從某個字符後選擇字符串
2>4>5 or
28>30>52 or
300>410>500 or
2>4>5>8
我的問題是列值,我怎麼能得到RIGHT的> 字符後的值,所以從價值選擇上述聲明將返回
4
30
410
5
在此先感謝
如果需要second value from right
,然後嘗試:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, '>', -2), '>', 1);
EDIT
一種解決方案:
DECLARE @str varchar(max);
set @str = '2>4>5>8';
SELECT reverse(substring(
substring(reverse(@str), charindex('>', reverse(@str))+1, len(@str) ), 0,
charindex('>', substring(reverse(@str), charindex('>', reverse(@str))+1, len(@str) ))
));
使用SQL Server 2014獲得第二個值,當我執行查詢時返回SUBSTRING_INDEX不是公認的內置函數名稱。 – user3127287
那你爲什麼把你的問題標記爲mysql? –
我的錯誤,對不起.. – user3127287
這類似於從一個分隔的字符串中提取第n個元件。唯一的區別是在這種情況下,我們需要第n個元素到最後一個元素。可以通過reverse
的雙重使用來實現更改。假設表是MyTable
而光場是MyColumn
,這裏有一個方法:
SELECT
Reverse(
CAST('<x>' + REPLACE(Reverse(MyColumn),'>','</x><x>') + '</x>' AS XML).value('/x[2]', --x[2] because it's the second element in the reversed string
'varchar(5)' --Use something long enough to catch any number which might occur here
))
FROM
MyTable
以信譽@Shnugo爲他的努力在這裏:Using T-SQL, return nth delimited element from a string
你無法施展作爲int
,我已經把varchar(5)
,因爲在那個階段弦仍然顛倒。如果你需要轉換成一個整數,通過在外部包裝一個convert/cast來完成。
這正是我所需要的,非常感謝你Steve.You救了我很多時間.. – user3127287
upvote,呵呵,SQL服務器有很差的字符串功能 –
Yep @OtoShavadze,有些東西在MySQL中更容易。雖然不是一切。例如沒有窗口函數。我認爲這是因爲MySQL與Web技術緊密相關,所以它往往會有不同的功能驅動因素。 –
;WITH cte1(Value)
AS
(
SELECT '2>4>5' Union all
SELECT '28>30>52' Union all
SELECT '300>410>500' Union all
SELECT '2>4>5>8'
)
SELECT
SUBSTRING(
(
REVERSE(SUBSTRING(((REVERSE((SUBSTRING(Value, RIGHT(CHARINDEX('>', Value), Len(Value)) + 1, Len(Value)))))),
CHARINDEX('>',((REVERSE((SUBSTRING(Value, RIGHT(CHARINDEX('>', Value), Len(Value)) + 1, Len(Value)))))))+1,LEN(Value)))
),CHARINDEX('>',(
REVERSE(SUBSTRING(((REVERSE((SUBSTRING(Value, RIGHT(CHARINDEX('>', Value), Len(Value)) + 1, Len(Value)))))),
CHARINDEX('>',((REVERSE((SUBSTRING(Value, RIGHT(CHARINDEX('>', Value), Len(Value)) + 1, Len(Value)))))))+1,LEN(Value)))
))+1,LEN(Value))
AS ExpectedValue
FROM cte1
從哪裏來'400'? –
你的第三行不包含400,只有410.你想要第二個數字還是第二個數字(如第四個示例所示)?請更新問題以反映您的答案,我很樂意提供幫助。 –
您的列還包含多個'>'字符。之後'''你需要獲得價值嗎? –