SQL查询中模式匹配期间将列值从实数据类型转换为字符串
我在SQL数据库中有一个名为“customer”的表,该表的列名为“customer\u no”,数据类型为real。“客户号”列中包含的数据如下:SQL查询中模式匹配期间将列值从实数据类型转换为字符串,sql,sql-server,Sql,Sql Server,我在SQL数据库中有一个名为“customer”的表,该表的列名为“customer\u no”,数据类型为real。“客户号”列中包含的数据如下: customer_no ........ ........ 54213154 11011011 11011012 11011013 11011014 11011215 11011015 11011101 45121478 ........ ........ 我想使用通配符模式匹配检索以1101开头的列值。我正在使用SQLServerManagem
customer_no
........
........
54213154
11011011
11011012
11011013
11011014
11011215
11011015
11011101
45121478
........
........
我想使用通配符模式匹配检索以1101开头的列值。我正在使用SQLServerManagementStudio。我进行了以下SQL查询以获得结果:
select * from customer
where CONVERT(VARCHAR(100), customer_no) like '1101%';
但问题是,我得到0行作为输出。上面的问题有什么不对吗?如何获得所需的结果?如果客户编号是整数,为什么不使用:
where customer_no >= 11010000 and
customer_no < 11020000
其中客户号>=11010000和
客户号<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只会让人头疼。您使用的是MySQL还是MS SQL Server?MS SQL Server@jarlhI想不出任何明显的原因说明您的查询无法工作。再加上你对@GordonLinhoff回答的评论,我相信你已经简化了在这里发布的问题,但这样做可能从根本上改变了问题的性质(甚至有效地消除了问题)。我建议你把问题再复杂一点,客户号的数据类型是什么?我怀疑它不是一个数字,有前导空格或其他什么。数据类型是real@Gordon LinoffI显示了表数据的部分视图。事实上,有更多的数据,我无法将其绑定在您显示的范围内。我想使用通配符模式匹配来推导结果@戈登Linoff@user14216688我认为你应该重新提出你的问题,这样才能清楚为什么戈登的答案不适用。戈登的回答通常可以扩展到许多更复杂的现实世界情况,但我们不能就此向您提供建议,因为我们不知道您的实际情况有多复杂。