![](/img/trans.png)
[英]How to strip all non-alphabetic characters (except hyphen) from string in SQL Server?
[英]How to remove all non-alphabetic characters from a column in SQL?
我希望通过从列值中删除任何数字或特殊字符并仅保留字母值 (AZ) 来清理名称列。
到目前为止,我已经尝试过使列全部大写并修剪前导/尾随空格:
upper(trim([Name])) [Name]
我被困在如何从这里开始,任何帮助表示赞赏!
首先,如果这是为了人们的名字,那么这是一个糟糕的主意。
全局名称当然可以包含空格、标点字符、重音字符和非拉丁字符(甚至数字)。
尽管如此,可能还有其他合法用例希望“从列中删除所有非字母字符”
@lptr在评论中发布了一个有趣的想法,极大地激发了这个答案。
首先使用TRANSLATE
获取需要清理的字符列表。 然后使用此列表再次调用TRANSLATE
并将它们全部替换为空格。 最后删除所有空格并根据您的情况转换为大写。
DECLARE @t TABLE
(
colX VARCHAR(100)
);
INSERT INTO @t
(colX)
VALUES ('@#£ab£cd&123x/=+xz'),
('%-+=/;:,.abc@#£&*()'),
('abc@#£&*() z')
SELECT *,
Cleaned = UPPER(REPLACE(translate(colx, bad_chars, SPACE(len(bad_chars))), ' ', ''))
FROM @t
CROSS APPLY (VALUES(replace(translate(colx, 'abcdefghijklmnopqrstuvwxyz' COLLATE Latin1_General_100_CI_AS, replicate('a', 26)), 'a', '') + '~')) V(bad_chars)
退货
+---------------------+-------------------+---------+
| colX | bad_chars | Cleaned |
+---------------------+-------------------+---------+
| @#£ab£cd&123x/=+xz | @#££&123/=+~ | ABCDXXZ |
| %-+=/;:,.abc@#£&*() | %-+=/;:,.@#£&*()~ | ABC |
| abc@#£&*() z | @#£&*() ~ | ABCZ |
+---------------------+-------------------+---------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.