我想修剪一个由汉字组成的字符。在T-SQL中修剪字符串的最佳方法是什么?
Select '10樓 10 /F'
Select '7樓 7/F'
Bad Result:
10樓 10 /F
7樓 7/F
I want to this:
10/F
7/F
我想修剪一个由汉字组成的字符。在T-SQL中修剪字符串的最佳方法是什么?
Select '10樓 10 /F'
Select '7樓 7/F'
Bad Result:
10樓 10 /F
7樓 7/F
I want to this:
10/F
7/F
尝试这样做:
with cte as (
select '10樓 10 /F' as t
union all
select '7樓 7/F'
)
select rtrim(ltrim(substring(t, charindex('樓', t) + 1, len(t)))) as t
from cte
哇,这很好!但如何将charindex()表示为动态或正则表达式或模式?例如,像这样3北翼3/F到3/F? –
你能定义不正确字符的所有ASCII码吗?在这种情况下,您可以替换它们,然后找到正确的一个位置。 –
@PatrickPangilinan - 突然,在评论中,还有另外一个与前两个截然不同的例子。这就是我一直以来要求你添加到你的问题中的事情。否则,我们可以期望任何给定的答案都会让你添加另一个评论,而另一个例子的答案不起作用。 –
您可以使用CHARINDEX找到中国字符的位置。
然后使用SUBSTRING根据该位置获取所需的零件。
并从结果中将所有空格替换为空。
例如:
select * , replace(substring(value, charindex(N'樓',value)+1, len(value)),' ','') as value2
from (values
(N'10樓 10 /F'),
(N'7樓 7/F')
) v(value);
注意,把N个字符串之前将其标记为NVARCHAR。
既然汉字是一个unicode字符。
你如何决定消除前7和10? –
那么这里的实际规则是什么?试图从两个非常相似的例子中推断它们可能导致截然不同的解释。例如。我可以执行规则“在第一个空格和任何剩余的空格字符之前删除所有内容” - 但是(接近)实际规则? –
我只是想把'10楼10楼'的左边去掉到'10/F' –