2017-06-16 463 views
0

我只是在特定列值的最后一位不是零时才从表格中选择行。如何在SQL中引用列值的最后一位数字

SELECT * 
FROM #table 
WHERE RIGHT(column, 1) BETWEEN 1 AND 9 

未返回正确的值。我认为这是因为数据以科学记数法存储为字符串。请帮忙!
更新:修复它!它原来是与数据类型的问题

+4

mysql或sql-server? – TriV

+1

列是什么类型的字段? char或varchar? –

+0

'RIGHT(trim(column),1)='0''?非常确定正确的是SQL服务器是#table,如果它是char数据,那么它被填充为相同的大小...因此可能需要修剪。 – xQbert

回答

0

你可以试试这个,

SELECT * 
FROM #table 
WHERE SUBSTRING(REVERSE(column), 1, 1) = '0' 
+0

不知何故,没有返回任何结果 –

+0

试试SUBSTRING(REVERSE(RTRIM(列)),1,1)='0' – Jigar

0

什么数据? 如果该列有尾随空格,那么你不会得到行。第二条选择声明;用rtirm(c1)删除空格。更新了答案以匹配更新后的问题。

declare @test table (
c1 varchar(10) 
) 

insert into @test (c1) values ('row 0'); 
insert into @test (c1) values ('row 0 '); 
insert into @test (c1) values ('row 1'); 
insert into @test (c1) values ('row 1 '); 
insert into @test (c1) values ('row 2'); 
insert into @test (c1) values ('row 2 '); 

select * from @test where right(c1, 1) != '0' 
select * from @test where right(rtrim(c1), 1) != '0' 
+0

我不确定它是否有间距 - 我可以使用rtrim而不冒险切断某些东西重要? –

+0

是的。 rtrim仅删除空格(ascii 32)。 – Durus

1

你可以尝试modulo操作者是否列是int

SELECT * 
FROM #table 
WHERE column % 10 <> 0 

如果数据包含科学记数法表示,可以使用str()功能:

SELECT * 
FROM #table 
WHERE right(str(column),1) <> 0 

这会将列的值转换为存储在varchar中的数字。如果您的值为3e2,则此值将变为300。如果您的值为1.234e2,则该值将四舍五入为123。有关处理非整数的信息,请参阅str()

+0

哦,原来不是一个int –

+0

请参阅答案可能的方法来处理科学记数法。 – chrisuae

相关问题