【发布时间】:2014-05-15 09:20:53
【问题描述】:
以下情况:
xy 列定义为 varchar(25)。在视图(SQL Server Mgmt Studio 2008)中,我过滤了所有带有字母的值(-> 不像 '%[A-Z]%')并将其转换为 int(cast(xy as int))。
如果我现在尝试对该列进行比较(例如 xy
提前感谢您的帮助...
这行得通(它过滤出例如值'G8111'): 选择单位 FROM CD_UNITS 作为 INNER JOIN DEF_STATION AS b ON a.STATION = b.STATION WHERE (b.CURENT = 'T') 和 UNID like '%[A-Z]%'
但是当我把它放在一个视图中时,一个 make select 就可以了:
select * from my_view where xy
系统提示“将 varchar 值 'G8111' 转换为数据类型 int 时转换失败。”但是应该在上面的查询中过滤掉“G8111”...
【问题讨论】:
-
您的过滤器仅适用于字母;您的数据中是否有其他字符(如逗号或其他标点符号)不会转换为 int?另外,您的过滤器是大写的;应该是小写过滤的值吗?
-
它会更具可读性,如果您可以使用查询生成视图本身来编辑您的问题
-
抱歉 - 删除了上一条评论,没想到。更好的过滤器是 WHERE ISNUMERIC(value) = 1 然后你至少保证它的数字(尽管可能仍然在 int 的范围之外)
-
ISNUMERIC(value)=1是毫无意义的检查,因为正如您所说,将接受无法转换为int的值,包括£本身和0d0这样的宝石。跨度>
标签: sql sql-server sql-server-2008 view