如何查询非数字字段上的“之间”数字数据?

2023-11-26

我刚刚在数据库中发现了一个查询失败,导致报告失败。查询的基本要点:

Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange

现在,myField 并不在所有行中包含数字数据[它是nvarchar 类型]...但是这个查询显然是这样设计的:它只关心该字段中的数据是数字的行。

问题在于,T-SQL(据我所知)不会短路Where子句,从而导致它放弃数据不是数字的记录,但有例外:

Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the nvarchar value '/A' to data type int.

除了将 myField 为数字的所有行转储到临时表中,然后查询该字段在指定范围内的行之外,我能做什么是最佳的?

我的第一次解析纯粹是为了尝试分析返回的数据并查看发生了什么:

Select *
From (
   Select *
   From table
   Where IsNull(myField, '') <> ''
   And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange

但我得到了与第一个查询相同的错误,我不确定我是否理解,因为我此时没有转换任何不应该是数字的数据。子查询应该只返回 myField 包含数字数据的行。

也许我需要早茶,但这对任何人都有意义吗?另一双眼睛会有所帮助。

提前致谢


IsNumeric 只告诉您字符串可以转换为one ofSQL Server 中的数字类型。它可能能够将其转换为货币或浮点数,但可能无法将其转换为整数。

改变你的

IsNumeric(myField) = 1

to be:

not myField like '%[^0-9]%' and LEN(myField) < 9

(也就是说,您希望 myField 仅包含数字,并适合 int)

Edit例子:

select ISNUMERIC('.'),ISNUMERIC('£'),ISNUMERIC('1d9')

result:

----------- ----------- -----------
1           1           1

(1 row(s) affected)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查询非数字字段上的“之间”数字数据? 的相关文章

  • T-SQL - 字符串连接

    希望有人可以提供帮助 我是一个新手 SQL 黑客 而且确实很糟糕 我在 SQL Server 2005 上有两个表 TABLE 1 和 TABLE2 TABLE1 COL1 COL2 1 10 2 20 3 30 4 10 4 20 5 2
  • 为表多次指定了 xxx 列

    我正在尝试将 db2 简单查询调整为 SQL SERVER 该查询在 db2 上运行良好 select from pb console users u join select from pb console users user role
  • SQL Server xp_cmdshell

    有没有其他方法可以通过以下方式获取文件名列表T SQL以外 INSERT INTO backups filename EXEC master sys xp cmdshell DIR b c some folder with sql back
  • T-SQL 中结果集的幂集(所有组合)

    我需要一个 t sql 代码来获取结果集的幂集 输入示例 ColumnName 1 2 3 Example Output one columns as nvarchar 1 2 3 1 2 1 3 2 3 1 2 3 输出集可能包含重复值
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • t sql中的相对路径?

    如何获取t sql中的相对路径 举个例子 sql文件位于文件夹中D temp 我想获取文件夹中文件hello txt的路径D temp App Data 如何使用相对路径引用 假设我正在 SQL Server Management Stud
  • 如何在 SQL Server 中添加具有自动增量值的字符串?

    如何在SQL Server中添加具有自动增量值的字符串 create table date sno int emp identity 1 1 我需要以下作为输出 emp 1 emp 2 用普通定义你的表INT IDENTITY column
  • SQL Server 2000 中是否提供公用表表达式 (CTE)

    我最近发现了以下文章 http www tsqltutorials com with common table expressions php http www tsqltutorials com with common table exp
  • 循环表行的最佳方法是什么?

    在 SQL Server 2008 R2 中循环数据库表行的最佳方法是什么 我正在寻找与编写 foreach 非常相似并且性能相当的东西 Thanks 最佳性能 不要循环表的行 使用基于集合的操作 Here s 关于 为什么 的良好讨论 h
  • C shell 脚本中是否有短路逻辑运算符?

    我认为 C shell 脚本的行为会像 C 一样 并对逻辑运算符使用短路求值 if e cache find monitor newer cache then endif 但在 if 语句中 即使第一个条件为真 也会检查第二个条件 从而给出
  • 如何在C#中监控SQL Server代理作业信息

    我需要创建一个应用程序来监视 SQL Server 2000 代理作业状态和作业发生时的信息 与 Windows 应用程序事件日志上显示的相同 现在我已经通过连接字符串连接到数据库 但我不知道如何从作业获取状态和信息 我需要在文本框中显示状
  • SQL Server 查看主键

    有没有办法在 sql server 中为视图提供主键 我知道在oracle中这是可能的 我不关心更新它的只读视图 但其他人正在 ms access 中使用它 所以我希望显示我知道正确的约束 是的 您可以创建一个索引视图 http msdn
  • SQL:从多个表中获取 USER 表中用户记录的计数。最好的方法是什么?

    我有4个SQL Server 2008版本 表 1 USER to store user information Fields UserId UserName 2 FILES to store files uploaded by user
  • 我可以在方法调用中强制自己短路吗?

    假设我想检查一堆对象以确保没有一个对象为空 if obj null obj Parameters null obj Parameters UserSettings null do something with obj Parameters
  • SELECT * FROM (VALUES (x,y)) AS TableLiteral(Col1, Col2) 的名称

    以下是有效的 SQL 语法 SELECT FROM VALUES p q x y AS TableLiteral Col1 Col2 并返回表 Col1 Col2 1 p q 2 x y 此语法可以进一步用于 CTE 等 这个有名字吗 我通
  • SQL Server 2000 JDBC 驱动程序

    我试图找到 SQL SERVER 2000 JDBC 驱动程序 用于从 SQL SERVER 提取数据 并执行一些用 Java JSF 实现的操作 知道在哪里可以找到司机吗 毫不奇怪 Microsoft com MSDN 停止支持并因此提供
  • t-sql 中的行相乘

    我有下表 ID Number 1 41 5 2 42 5 3 43 5 2 44 5 2 45 5 1 46 5 1 47 5 我需要编写一个查询 该查询将返回不同的 ID 和相应的 Number 列值相乘 对于给定的表结果应该是这样的 I
  • 使用 Microsoft SQL Server 管理复制表

    需要使用复制表Microsoft SQL Management Studio 2008 TABLE 还需要复制所有表行 主键 ID 在 SSMS 中打开一个新的查询窗口 然后执行如下操作 SELECT INTO NewTable FROM
  • 确定表的行大小

    如何确定表的最大行大小 我正在寻找一个可以执行此操作的工具或脚本 这样我就不必手动添加每列的大小 我的目标是生成一份太宽表格的报告 以便我们可以考虑重组它们 我知道我们有几个太宽 每个 8K 页面只能容纳 1 行 但我想找到其余的 另一种方
  • SQL删除具有重复值的行同时保留一个

    假设我有这张桌子 id data value 1 a A 2 a A 3 a A 4 a B 5 b C 6 c A 7 c C 8 c C 我想删除每个数据具有重复值的行 同时保留具有最小 id 的行 例如结果将是 id data val

随机推荐