2017-07-18 61 views
-1

我想修剪一个由汉字组成的字符。在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 
+0

你如何决定消除前7和10? –

+1

那么这里的实际规则是什么?试图从两个非常相似的例子中推断它们可能导致截然不同的解释。例如。我可以执行规则“在第一个空格和任何剩余的空格字符之前删除所有内容” - 但是(接近)实际规则? –

+0

我只是想把'10楼10楼'的左边去掉到'10/F' –

回答

0

尝试这样做:

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 
+0

哇,这很好!但如何将charindex()表示为动态或正则表达式或模式?例如,像这样3北翼3/F到3/F? –

+0

你能定义不正确字符的所有ASCII码吗?在这种情况下,您可以替换它们,然后找到正确的一个位置。 –

+0

@PatrickPangilinan - 突然,在评论中,还有另外一个与前两个截然不同的例子。这就是我一直以来要求你添加到你的问题中的事情。否则,我们可以期望任何给定的答案都会让你添加另一个评论,而另一个例子的答案不起作用。 –

2

您可以使用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字符。

相关问题