首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用T-SQL删除未知字符?

如何使用T-SQL删除未知字符?
EN

Stack Overflow用户
提问于 2017-07-24 15:25:35
回答 5查看 2.2K关注 0票数 3

我尝试执行一个脚本来消除字符串中的中文字符以及我想要删除的中文字符之间的中文字符。请参考下面的示例。谢谢。

代码语言:javascript
运行
复制
select LTRIM(SUBSTRING('Tower 6A 第6A座', PATINDEX('%[a-zA-Z0-9]%', 'Tower 6A 第6A座'), LEN('Tower 6A 第6A座')))
select LTRIM(REPLACE(SUBSTRING('Tower 6A 第6A座', CHARINDEX(N'樓', 'Tower 6A 第6A座') + 1, LEN('Tower 6A 第6A座')), ' ', ''))

示例字符串:

代码语言:javascript
运行
复制
Tower 6A 第6A座
Tower 3 第3座

错误结果:

代码语言:javascript
运行
复制
Tower 6A ?6A?
Tower6A?6A?
Tower 3 ?3?
Tower3?3?

很好的结果,我想实现:

代码语言:javascript
运行
复制
Tower 6A
Tower 6A
Tower 3
Tower 3
EN

回答 5

Stack Overflow用户

发布于 2017-07-24 16:40:26

尝尝这个

代码语言:javascript
运行
复制
   SELECT Replace(Replace('Tower 6A 第6A座','[^a-zA-Z0-9]+', ''),'?','')
票数 3
EN

Stack Overflow用户

发布于 2017-07-24 16:02:22

看起来很奇怪,但工作很有效。然而,我不会指望很好的性能:

代码语言:javascript
运行
复制
;WITH string AS (
    SELECT N'Tower 6A 第6A座' s
),
split AS (
    select LEFT(s, 1) s_item,
       STUFF(s, 1, 1, N'') s
    from string
    union all
    select LEFT(s, 1),
       STUFF(s, 1, 1, N'')
    from split
    where s > ''
)
,
remove_non_ascii AS ( 
    SELECT s_item, UNICODE(s_item) s_unicode
    FROM split WHERE UNICODE(s_item)<256
)
SELECT STUFF((SELECT s_item FROM remove_non_ascii
FOR XML PATH, TYPE).value('.[1]', 'NVARCHAR(MAX)'), 1,0, '');

它的用途:

将字符串拆分成大于256的UNICODE字符(您可以摆弄condition)

  • Puts

它使用递归查询,因此在字符串超过100个字符的情况下,您需要通过添加:OPTION (MAXRECURSION n) (其中n是新的递归循环数量)来扩展递归循环的数量。

票数 2
EN

Stack Overflow用户

发布于 2017-07-24 16:13:46

尝尝这个

代码语言:javascript
运行
复制
;With cte(Data)
AS
(
SELECT 'Tower 6A 第6A座' UNION ALL
SELECT 'Tower 3 第3座'
)
SELECT
CASE WHEN CHARINDEX('Tower', DATA)= 0 THEN 'Tower ' + DATA ELSE DATA END AS DATA
FROM
(
SELECT
Split.a.value('.', 'VARCHAR(1000)') AS Data
FROM
(
SELECT  CAST('<S>' + REPLACE(REPLACE(Data, '?', '</S><S>'),'','</S><S>') + '</S>' AS XML) AS Data
FROM cte
) AS 
    A CROSS APPLY Data.nodes('/S') AS Split(a)
) DT
Where
DT.Data <> ''

结果

代码语言:javascript
运行
复制
DATA
----------
Tower 6A 
Tower 6A
Tower 3 
Tower 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45274496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档