如何解决在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 举报,一经查实,本站将立刻删除。