问题是我需要忽略数字中的迷路字母:例如19A或B417
答案 0 :(得分:6)
看看这里: Extracting Numbers with SQL Server
有几个隐藏的“陷阱”在文章中得到了很好的解释。
答案 1 :(得分:1)
这取决于你要处理的数据量,但在SQL中这样做可能会很慢。不是每个人都会同意我的意见,但我认为所有数据处理都应该在应用程序代码中完成。
我只需要获取您想要的行,并在您正在处理的应用程序中对其进行过滤。
答案 2 :(得分:0)
这里最简单的方法是创建一个接收地址的CLR函数。在CLR函数中,您将获取地址的第一部分(假设它是门牌号),应该用空格分隔。
然后,用空字符串替换任何非数字字符。
你应该有一个表示该点整数的字符串,你可以传递给Int32类的Parse方法产生一个整数,然后你可以检查它是否是奇数。
我建议使用CLR功能(假设您使用的是SQL Server 2005及更高版本,并且可以设置数据库的兼容级别),因为在.NET中执行字符串操作比在T-SQL中执行更容易。
答案 3 :(得分:0)
假设[地址]是其中包含地址的列...
Select Case Cast(Substring(Reverse(Address), PatIndex('%[0-9]%',
Reverse(Address)), 1) as Integer) % 2
When 0 Then 'Even'
When 1 Then 'Odd' End
From Table
答案 4 :(得分:0)
我以前经历过这次演习。最好的替代方法是向表或子辅助表添加一列,该表存储用于此目的的推断数值。然后使用迭代查询重复设置列,直到获得足够的准确度和覆盖率。你最终会遇到像“First,Third”,“451a”,“1200 South 19th Blvd East”这样的东西,更糟糕的是。
然后在出现新记录和已编辑记录时对其进行过滤。
像往常一样,UDF应该避免缓慢和(相对)较少的可调试性。