Sql server )。还有至少16个不同的空格、连接符等(U+2000到U+200F)@roryap-原始unicode值中0后面有一个空格。为什么要转换unicode?最好在整个应用程序中使用Unicode。无论如何?表示输入字符串中有无法在目标代码页中表示的字符。您的输

Sql server )。还有至少16个不同的空格、连接符等(U+2000到U+200F)@roryap-原始unicode值中0后面有一个空格。为什么要转换unicode?最好在整个应用程序中使用Unicode。无论如何?表示输入字符串中有无法在目标代码页中表示的字符。您的输,sql-server,tsql,unicode,character-encoding,collation,Sql Server,Tsql,Unicode,Character Encoding,Collation,)。还有至少16个不同的空格、连接符等(U+2000到U+200F)@roryap-原始unicode值中0后面有一个空格。为什么要转换unicode?最好在整个应用程序中使用Unicode。无论如何?表示输入字符串中有无法在目标代码页中表示的字符。您的输入是否在最后一个数字后包含不可见字符?我怀疑LEN(PostalCode)将返回7或更高。您可能希望所有邮政编码都可以用[0-9][A-Z]表示。你可能会担心的一件事是,邮政编码是否可能包含字母,而有人无意中键入了带有口音的字母。例如,如果您通


)。还有至少16个不同的空格、连接符等(U+2000到U+200F)@roryap-原始unicode值中0后面有一个空格。为什么要转换unicode?最好在整个应用程序中使用Unicode。无论如何
表示输入字符串中有无法在目标代码页中表示的字符。您的输入是否在最后一个数字后包含不可见字符?我怀疑
LEN(PostalCode)
将返回7或更高。您可能希望所有邮政编码都可以用[0-9][A-Z]表示。你可能会担心的一件事是,邮政编码是否可能包含字母,而有人无意中键入了带有口音的字母。例如,如果您通过删除非ASCII字符来处理这些字符,“1234-ÁBCD”不会表示错误,而只是变成“1234-BCD”而不是“1234-ABCD”。这假设OP可以控制DB架构。@roryap。理解。不过,这只是一项建议。我确实提供了一种解决问题的方法,尽管我可以对模式没有控制权的原因进行更新。当你说“任何国家的邮政编码中都不允许使用Unicode字符”时,你说的是一个笼统的说法,不是100%准确,因为拉丁字母和阿拉伯数字是完全有效的Unicode字符。您的意思更像是“任何国家的邮政编码中都不允许使用U+0020..U+007E范围以外的Unicode字符(相当于ASCII或ISO 8859-1下半部分的打印字符)”。我不知道如何简洁地表达这一点;也许“任何国家都不允许在邮政编码中使用非ASCII打印字符的Unicode字符”。@JonathanLeffler感谢您的评论。这就是为什么我复制了维基百科文章中的“ISO基本拉丁字母表”。因此,可能“没有国家使用ASCII字符集中未表示的字母,并且这些字母对VARCHAR数据类型无效”?不需要提及可打印性,因为其他字符只有0-9、空格和连字符。是的,我知道它在底部,但可能是一个“(见下文)”或类似的字符。目前,你在第2项中的陈述是矛盾的;邮政编码字符为Unicode字符;它们只是特别常见/简单的字符。如果是多个字符呢?和/或如果它们是不同的Unicode字符呢?那么我的第二种方法不是正确的做法。(但仍有必要尝试
RTRIM
看看它是否有效。)这是对原始问题的一种解释的回答,“我如何在结尾处仅去掉这个特定字符”。
replace(cast((PostalCode) as varchar))), '?', '')
cast(rtrim(PostalCode) as varchar))
select unicode(right(PostalCode, 1)) from …
select (case when right(PostalCode, 1) = nchar(the_number_from_above)
        then left(PostalCode, len(PostalCode) - 1)
        else PostalCode end)