sql - 像 int 一样选择和过滤 nvarchar

标签 sql sql-server t-sql

我的 MS SQL 2005 数据库的表 McTable 中有一个 nvarchar 列 BigMacs,其中包含字母数字和数值。例如:

  • 132
  • 432adfad
  • sfs54543
  • 5256

现在我想做这样的事情:

select Convert(BigMacs, int) from McTable
where IsNumerc(BigMacs) = 1 AND Convert(BigMacs, int) > 6

但是当我这样做时,我收到一个错误:

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

在线选择。

如何解决这个问题?

最佳答案

这可能是因为 IsNumeric 函数对于任何可以转换为数字的值都返回 true。尝试以下示例:

create table McTable  (BigMac varchar(255))

insert into McTable  select '1p927'
insert into McTable  select '1927'
insert into McTable  select '1,927'
insert into McTable  select '1.927'

select BigMac, isnumeric(BigMac)
from McTable 

select BigMac, CAST(BigMac AS DECIMAL)
from McTable 
where isnumeric(BigMac) = 1

即使除了“1p927”之外的所有行都是数字,转换也会失败!这是因为“1,927”无法转换为十进制(在我的机器上)

IsNumeric 不完全按照指定的方式工作。发现here ,你可以使用

IsNumeric (data + 'e0')

-江户

关于sql - 像 int 一样选择和过滤 nvarchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725042/

相关文章:

sql - 来自 Oracle DB 的 SSRS 报告 - 使用存储过程

sql - 如何计算 ID 的组/字段值的数量?

sql - SQL 中行之间的日期差异

按重叠日期进行 SQL 分区

sql-server - 合并语句和触发器 SQL Server 2012

t-sql - Azure 流分析将多个输入分组到一个输出

sql - 从 generate_series(int, int) 函数更新表 Postgres 9.0

mysql - SQL如何选择唯一的一对一配对

sql-server - SQL Server 2012 中的身份跃升了 10000

sql - 在 SQL Server 2016 中添加小计行作为汇总项