如何在MS SQL中找到奇数门牌号码?

时间:2009-01-05 15:29:17

标签: sql-server

问题是我需要忽略数字中的迷路字母:例如19A或B417

5 个答案:

答案 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应该避免缓慢和(相对)较少的可调试性。