SQL SERVER从某个字符后选择字符串
我有一些关于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.你想要第二个数字还是第二个数字(如第四个示例所示)?请更新问题以反映您的答案,我很乐意提供帮助。 –
您的列还包含多个'>'字符。之后'''你需要获得价值吗? –