微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在SQL查询中的模式匹配期间将列值从实际数据类型转换为字符串

如何解决在SQL查询中的模式匹配期间将列值从实际数据类型转换为字符串

我在sql数据库中有一个名为“ customer ”的表,该表的列名称为“ customer_no ”,其数据类型为 real customer_no ”列中包含的数据如下:

customer_no
........
........
54213154
11011011
11011012
11011013
11011014
11011215
11011015
11011101
45121478
........
........

我想使用通配符模式匹配来检索以1101开头的列值。我正在使用sql Server Management Studio。我进行了以下SQL查询获取结果:

select * from customer
where CONVERT(VARCHAR(100),customer_no) like '1101%';

但是问题是,我得到0行作为输出。上面的查询有什么问题吗?如何获得理想的结果?

解决方法

如果客户编号是整数,为什么不使用:

where customer_no >=  11010000 and
      customer_no <  11020000
      
,

您需要先将实数转换为数字

 CREATE TABLE #customer
 (
   customer_no real
 )

 INSERT INTO #customer(customer_no) SELECT 54213154
 INSERT INTO #customer(customer_no) SELECT 11011011
 INSERT INTO #customer(customer_no) SELECT 11011012
 INSERT INTO #customer(customer_no) SELECT 11011013
 INSERT INTO #customer(customer_no) SELECT 11011014
 INSERT INTO #customer(customer_no) SELECT 11011215
 INSERT INTO #customer(customer_no) SELECT 11011015
 INSERT INTO #customer(customer_no) SELECT 11011101
 INSERT INTO #customer(customer_no) SELECT 11021014
 INSERT INTO #customer(customer_no) SELECT 45121478

 SELECT * FROM #customer
  WHERE CONVERT(VARCHAR(100),CONVERT(NUMERIC,customer_no)) like '1101%';

  DROP TABLE #customer
,

将值转换为字符表示形式时,使用的是科学符号,这就是模式不匹配的原因。

数学会起作用吗?

where cast(floor(customer_no) as int) /
  cast(power(10,floor(log10(customer_no) - 3)) as int) = 1101
    -- note that floor(log10(1101)) = 3

您得到的其他建议似乎是合理的,因此仅在id的长度可变的情况下才适用。为ID使用浮点值只会引起麻烦。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。