Sql server SQL Server:邮政编码解析器

Sql server SQL Server:邮政编码解析器,sql-server,tsql,Sql Server,Tsql,我需要用T-SQL编写一个表值函数,该函数将接受任何字符串格式的邮政编码,并为邮政编码的前五位和后四位部分输出两个整数 输入可以如下所示:“123456787432”,在这种情况下,只应考虑前9位数字 或者它可以像这样:“12345-4567”,或者像这样:“12345”,在这种情况下,第二部分输出应该是0 或者数字中可能有任何垃圾字符,应该忽略这些字符。 如果第二部分为“0345”,则输出应为345 如果有一种有效的方法过滤掉所有非数字字符,剩下的就很容易了 如有任何建议,我将不胜感激 如果有

我需要用T-SQL编写一个表值函数,该函数将接受任何字符串格式的邮政编码,并为邮政编码的前五位和后四位部分输出两个整数

输入可以如下所示:“123456787432”,在这种情况下,只应考虑前9位数字

或者它可以像这样:“12345-4567”,或者像这样:“12345”,在这种情况下,第二部分输出应该是0

或者数字中可能有任何垃圾字符,应该忽略这些字符。 如果第二部分为“0345”,则输出应为345

如果有一种有效的方法过滤掉所有非数字字符,剩下的就很容易了

如有任何建议,我将不胜感激

如果有一种有效的方法过滤掉所有非数字 角色,其余的都很简单

不知道效率,但这是一种方法

declare @s varchar(10)

set @s = 'ab123c d45'

while patindex('%[^0-9]%', @s) > 0
set @s = stuff(@s, patindex('%[^0-9]%', @s), 1, '')

select @s

有两件事我不确定: 1) 如果一个邮政编码有一个前导零或两个(有些有)?你不想把这些都去掉。
2) 您提到,如果第二部分有前导零,您希望将其删除。ZIP+4(又名九位邮政编码)要求第二部分有4位数字。

为什么是TVF?您可以使用带有
CASE
语句的视图更有效地实现此逻辑。因为我需要两部分单独的邮政编码。非常感谢!太棒了!